我正在编写一个 C# Winforms 程序,以根据给定的 IP 地址范围获取连接到我的 LAN 的所有计算机。
我正在使用Ping
该类来识别计算机。但这里的问题是我收到了来自连接到 LAN 的所有设备(如打印机、IP 电话等)的响应。
请帮助我过滤这些设备并仅从 LAN 获取计算机。
使用 PING 无法判断网络节点是否是计算机/打印机/IP 电话等。
您需要使用更高级别的协议(如 NETBIOS 或 DNS)来解决此问题,但这在很大程度上取决于设备的实现方式。
好吧,打印机、电话等可能有通用计算机运行 TCP/IP 堆栈和一些专门的服务器软件,所以归结为你对“计算机”的定义......仍然,听起来麻烦多于其价值,除非您能识别出只有您认为的计算机才有的东西,而且所有这些东西都会有。在 Windows 网络上,可能是 SMB - 但这可能会捕获通过 SMB 公开存储的 NAS。
我不认为有一个通用的方法来做你想做的事。就像 Lloyd 指出的那样,nmap 做了一些指纹识别,但这远非完美(它通常会非常接近特定的操作系统版本,但它无法判断哪种物理设备正在运行该操作系统)。