为连接的网络设备获取唯一标识符

3

我连接到一个WLAN,其中也连接了一种特殊的硬件设备。我通过套接字与该设备通信,因为我知道它的IP地址。

有没有办法通过id在网络中识别出这个硬件设备?我发现在Java中无法获取连接设备的MAC地址。是否有其他替代方案?

谢谢,最好的问候


你说你已经知道了设备的IP地址。那么你还需要什么进一步的识别信息呢?请澄清一下。 - NPE
设备IP不唯一。问题在于程序保存了这些IP地址。如果另一个设备连接并具有与我的设备之前相同的IP,则我必须能够区分它们。 - softwaresupply
你对运行在设备上的软件有任何控制权吗? - NPE
这是一种特殊的硬件设备,其上的软件我无法控制。 - softwaresupply
3个回答

3

MAC地址应该是唯一的。也许您可以从ARP表中获取所需信息。在Windows和Linux上,命令“arp -a”可以使用。

但是存在以下问题:

  1. 这不是可移植的方法。
  2. ARP表相当不稳定。
  3. 如果设备在路由器后面,则此方法无效。

谢谢,用Java解析控制台就可以了! - softwaresupply

2
在Java中,您可以调用NetworkInterface.getHardwareAddress()来获取硬件MAC地址。
Enumeration<NetworkInterface> enumNicList = NetworkInterface.getNetworkInterfaces();
while(enumNicList.hasMoreElements())
{
    NetworkInterface oNic = enumNicList.nextElement();
    byte[] baMacAddress = oNic.getHardwareAddress();
    String sMacAddress = new BigInteger(1, baMacAddress).toString(16);
    System.out.println(sMacAddress);
}


0
如果你无法控制设备的响应,并且设备没有包含任何识别API调用等内容,那么只需使用IP地址,并通过路由器将该IP静态分配给该设备。 然后,您可以创建自己的 IP <-> 设备列表表格,甚至可以从路由器中获取IP表。
想想看,您可能可以通过从路由器的配置屏幕上获取DHCP表来获取MAC地址。

如上所述,IP地址并不是唯一的,因为设备并不总是具有相同的IP地址 - 例如,在设备重新连接或甚至在另一个路由器网络中之后。我想在Java运行时找到一个唯一的设备标识。 - softwaresupply
那么我假设您无法访问此网络中的路由器?如果您无法控制该设备及其应用程序,并且它不发送任何可识别信息,并且它没有识别API,并且它查询您的应用程序的方式没有独特的特征,那么您就没有办法了。 - Matt H
在某些情况下,路由器上可能会有控制。但无论如何,应用程序都应该在运行时确定MAC地址/ID。 - softwaresupply

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接