赞
踩
255.255.255.0
这种,
192.168.0.0/255.255.252.0
类似的情况const os = require("os"); //导入OS模块 const net = require("net"); const Socket = net.Socket; const timeout = 100; /** * 链接指定主机,成功则返回IP,失败返回false * @param {string} host ip地址 * @param {number} port 端口号 * @param {function} cb 回调 * @returns Promise */ async function scanHost(host, port, cb) { return new Promise((resolve, reject) => { const socket = new Socket(); socket.setTimeout(timeout); socket.on("connect", function () { console.debug(`链接成功:${host}`); socket.end(); cb && cb(null, host); resolve(host); }); socket.on("timeout", function () { console.error(`链接超时:${host}`); socket.destroy(); cb && cb(new Error("timeout"), host); resolve(false); }); socket.on("error", function (err) { console.warn(`链接失败:${host}`); cb && cb(err, host); resolve(false); }); socket.on("close", function (err) {}); socket.connect(port, host); }); } /** * 扫描指定网段 * @param {string} net 网段 * @param {number} port 端口号 * @param {function} cb 回调 * @returns Pomise */ async function scan(net, port, cb) { if (port < 0 || port > 65535) { throw new Error("输入的端口号超过有效范围0 ~ 65535."); } const deferCache = []; for (let i = 1; i <= 255; i++) { deferCache.push(scanHost(net + "." + i, port)); } const result = (await Promise.all(deferCache)).filter((it) => it); if (cb) { cb(result); } return result; } /** * 获取本机局域网的IPV4 * @return {Array} */ function getIpAddress() { let ipv4 = []; let ifaces = os.networkInterfaces(); // console.log(ifaces); //所有类型的适配器和全部内容 for (let dev in ifaces) { if (/en[\d]+/.test(dev)) { ifaces[dev].forEach(function (details, alias) { //判断需要获取IP的适配器,过滤掉非IPv4和mac无效的设备 if (details.family == "IPv4" && details.mac !== "00:00:00:00:00:00") { //判断是IPV4还是IPV6 还可以通过alias去判断 ipv4.push(details.address); } }); } } return ipv4; } function getNet() { const ipv4 = getIpAddress(); const netList = []; console.debug(`找到有效IP: ${ipv4.join(", ")}`); if (!ipv4 || !ipv4.length) { return false; } ipv4.map((ip) => { const net = ip.split(".").slice(0, 3).join("."); if (!netList.includes(net)) { netList.push(net); } }); return netList; } // console.log(getIpAddress()); // console.log(getNet()); // scan(getNet(), 22221, (result) => { // console.log(result); // }); async function autoScan(port = 22221) { const netList = getNet(); if (!netList || !netList.length) { return; } return (await Promise.all(netList.map(async (net)=>{ const result = await scan(net, port) if(result && result.length){ return result } return false }))).filter(it => it) } // scan("192.168.32", 22221, (result) => { // console.log(result); // }); // scan("192.168.32", 5555, (result) => { // console.log(result); // }); // test autoScan(80).then((result) => console.log(result)); // module.exports = { // autoScan, // scan, // getIpAddress, // getNet, // scanHost, // };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。