gpt4 book ai didi

node.js - 我的网络中的设备/计算机发现

转载 作者:IT老高 更新时间:2023-10-28 23:21:50 28 4
gpt4 key购买 nike

我试图为我的测试项目编写一个示例程序,以找出所有设备(如 android 或 IOS)或连接到我的计算机所连接的网络的其他计算机。当我登录到路由器管理控制台时,我能够看到所有连接的设备,并且我希望使用我的程序获得相同的列表。我尝试了下面的示例代码,我在 https://gist.github.com/chrishulbert/895382 上看到了帖子。发现它很有趣并尝试使用它,但我无法获得列表。我是否遗漏了以下代码中的某些内容,或者这是我所指的错误示例?在这方面的任何帮助将不胜感激。

function listen(port) {
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo)
{
console.log("server got: " + msg + " from " + rinfo.address + ":" + rinfo.port);
});
server.bind(port);

}

function search() {
var message = new Buffer(
"M-SEARCH * HTTP/1.1\r\n" +
"HOST:239.255.255.250:1900\r\n" +
"MAN:\"ssdp:discover\"\r\n" +
"ST:ssdp:all\r\n" +
"MX:3\r\n" +
"\r\n"
);

var client = dgram.createSocket("udp4");
client.bind(0,"",function() {
console.log(client.address().port);
listen(client.address().port);
client.send(message, 0, message.length, 1900, "239.255.255.250",
function() {
// client.close();
});
}); // So that we get a port so we can listen before sending

}
search();

最佳答案

@Algi , 设备发现的最佳选择是使用需要提升权限的 ICMP 协议(protocol)。使用 UDP 协议(protocol)(​​在 OSI 层的第 3 层和第 4 层运行,不太适合设备发现,除非实现了用于发现的现有客户端/服务器协议(protocol),例如与 DNS、NetBIOS 和 DropBox 应用程序一起使用的协议(protocol))。

请不要误解,设备发现可以在这些更高级别的协议(protocol)上实现,但假设设备不存在于网络上,因为 UDP/TCP 端口 N 未打开是愚蠢的。

作为 @Josh3736提到,SSDP 可以实现,但是因为它使用了 UPnP出于那篇文章中概述的原因,我建议不要这样做。

@Illizian , 我是 node-libnmap 的作者包,想知道当您说它“不可靠”时是否可以详细说明。你用的是什么版本?最新版本位于 0.1.10并且相当稳定。

因为它与 nmap 二进制文件交互,所以您的扫描结果可能会受到实现“空闲扫描实现”的 --min-rt-timeout、--max-rt-timeout 和 --initial-rt-timeout 选项的影响算法”组件。

这些组件将根据之前的探测时间动态设置超时,如果扫描经过严格过滤的(基于主机和基于边界的 IDS 和 IPS 系统),那么您肯定会得到意想不到的结果。

话虽如此,如果您遇到超出该范围的问题,也许您发现了错误?如果可以,请在 https://github.com/jas-/node-libnmap/issues 上报告。 ?

附带说明,使用 arp 表来发现附近的主机不会提供您网段上的“所有”可用主机。只有那些当时“健谈”的人。 arp 表不断将机器推离桌面。

关于node.js - 我的网络中的设备/计算机发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433580/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com