1

我正在尝试创建一个 VB .Net 程序来确定设备是否在我的无线 LAN 上(启用了 DHCP),这样我就可以根据那里的设备采取特定的行动。

通常,当我查询 arp 缓存(使用我编写的反向查找例程)以确定设备的 MAC 地址是否存在时,我找不到它,因为设备缓存超时已过期并且设备已从 arp 中删除。

因为设备使用 DHCP 来获取它的 IP 地址,所以我无法使用“已知”IP 地址查询 arp 缓存,但必须使用 MAC 地址来识别设备。

由于我试图快速发现设备是打开还是关闭,因此我想确定我的 MAC 搜索失败是由于缓存条目过期还是设备真正被关闭造成的。

有什么办法,只知道设备 MAC 地址,强制它再次被 arp 知道,这样我就可以尝试在 30 秒内再次搜索 arp 缓存以查看是否出现条目?

4

1 回答 1

1

如果您与设备位于同一子网中,并且设备将响应广播 ICMP ping,您可以发送广播 ping。

在我的示例中,我的机器是子网 129.21.49.0/24(49.0 到 49.255)上的 129.21.49.41。

  • 这种网络的网络地址是 129.21.49.0(第一个地址)
  • 第一个可分配地址是 129.21.49.1
  • 最后一个可分配的地址是 129.21.49.254
  • 广播地址为 129.21.49.255。

这是一个例子:

angst(~) > ping 129.21.49.255
PING 129.21.49.255 (129.21.49.255): 56 data bytes
64 bytes from 129.21.49.254: icmp_seq=0 ttl=255 time=0.316 ms
64 bytes from 129.21.49.205: icmp_seq=0 ttl=64 time=0.422 ms (DUP!)
64 bytes from 129.21.49.148: icmp_seq=0 ttl=64 time=0.703 ms (DUP!)
64 bytes from 129.21.49.31: icmp_seq=0 ttl=64 time=0.766 ms (DUP!)
64 bytes from 129.21.49.23: icmp_seq=0 ttl=64 time=0.822 ms (DUP!)
64 bytes from 129.21.49.246: icmp_seq=0 ttl=64 time=13.538 ms (DUP!)
^C

这些是我的子网上的所有在线机器,它们被配置为响应广播 ping。

于 2013-07-02T17:11:40.980 回答