[Source | Nodejs] 방화벽 확인

다수의 서버에 포트 오픈여부를 확인하기 위한 코드를 정리합니다.


작성일 : 2022-01-26
nodeJs Ver : v16.13.1


1> 코드작성 (checkPort.js)

// For Execute Shell
//   node checkPort.js > checkPortResult.log
const net = require("net");
const target = require("./target");

const checkport = (host, port) => {
    return new Promise((resolve, reject) => {
        const socket = new net.Socket();
        socket.on("connect", () => {
            socket.destroy();
            resolve({host, port, isAlive: true});
        });
        socket.on("timeout", () => {
            socket.destroy();
            resolve({host, port, isAlive: false});
        });
        socket.on("error", (exception) => {
            //console.error(exception);
            socket.destroy();
            resolve({host, port, isAlive: null});
        });
        socket.setTimeout(target.checkTimeout);
        socket.connect(port, host);
    });
};

const checkNext = () => {    
    const targetInfo = target.serverList.shift().split(":");
    const name = targetInfo.pop().trim();
    const port = targetInfo.pop().trim();
    const host = targetInfo.pop().trim();
    checkport(host, port).then(result => {
        console.log(`${result.isAlive ? "O" : "X"}\t${name}\t${result.host}:${result.port}`);
        if(target.serverList.length <= 0) {
            return;
        } else {
            checkNext();
        }
    });
};

checkNext();

2> 체크 타임아웃과 대상서버 목록 (target.js)

exports.checkTimeout = 3000;
exports.serverList = [
    // IP : PORT : NAME
    "223.130.200.104 : 80 : NAVER",
    "223.130.200.105 : 8080 : NAVER-ERROR",
];

3> 다음 명령으로 실행하면 결과가 파일(checkPortResult.log)에 작성된다.

node checkPort.js > checkPortResult.log