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} */ 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} */ 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 }