kit.program/kit/src/net.js
2025-03-12 11:23:44 +08:00

84 lines
2.1 KiB
JavaScript

require("./init")
const osutil = require("./util/osutil")
const killer = require('cross-port-killer');
const net = require('net');
/**
* 模拟 telnet ,检测端口是否开放
* @param port
* @param host
* @param timeout
* @returns {Promise<unknown>}
*/
async function telnet(port, host, timeout=3000){
$logger.debug(`port=${port} host=${host} timeout=${timeout}`)
return new Promise(function (resolve, reject){
const socket = new net.Socket();
socket.setTimeout(timeout, function() {
socket.end();
reject("链接超时")
});
socket.connect(port, host);
socket.on('connect', function() {
resolve('连接成功');
socket.end();
});
socket.on('error', function(err) {
reject('连接失败');
});
})
}
async function killport(port) {
return killer.kill( port );
// let func = osutil.choise([
// require("./windows/net").killport,
// require("./linux/net").killport,
// ])
// return func && func(port);
}
/**
* 获取端口信息
* 因为命令输出缓存问题,有缺陷。
* @param port
* @returns {Promise<void>}
*/
async function getport(port) {
$logger.info( "暂未实现" );
}
async function checkip(){
const url = "https://myip.ipip.net/json"
const http = url.startsWith("https:") ? require("node:https") : require('node:http');
return new Promise((resolve, reject) => {
http.get(url, (res) => {
let data = '';
// A chunk of data has been recieved.
res.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received. Resolve the promise with result
res.on('end', () => {
resolve(JSON.parse(data));
});
}).on("error", (err) => {
// In case of any error reject the promise
reject(err);
});
});
}
module.exports = {
killport, getport, telnet, checkip
}