다수의 서버에 포트 오픈여부를 확인하기 위한 코드를 정리합니다.
작성일 : 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