我需要找到我的设备从中获取TCP请求的设备的mac地址,我将通过tcp端点获取设备的IP地址,但我需要找出设备的mac地址。我的应用程序将在Windows和Linux上运行,所以请建议我一个跨平台的方法来找到mac地址..任何boost库都会帮我做同样的事情?
答案 0 :(得分:6)
首先,您无法找到不在同一局域网中的任何网络接口的MAC地址。该信息不会在路由器之外传输。
有一个名为arp
的命令行工具,可在Unix和Windows上使用,它将列出与您的PC通信的接口的IP地址和MAC地址。即。
arp -a
Windows上的提供了类似的内容:
Interface: 9.175.198.236 --- 0x2
Internet Address Physical Address Type
9.175.198.129 00-1b-53-46-fa-7f dynamic
和类Unix一样:
foo.bar.com (10.27.68.72) at 00:50:56:AE:00:0B [ether] on eth0
baz.bar.com (10.27.68.77) at 00:50:56:AE:00:10 [ether] on eth0
? (10.27.68.1) at 00:50:5A:1B:44:01 [ether] on eth0
您可以尝试调用它并以编程方式解析输出。
答案 1 :(得分:1)
首先要注意的是,在TCP层,您不知道MAC地址。
对于你的情况,我想你可以做两件事:
使用arp或写一段类似于arp的代码,它会在给定IP地址的情况下查找MAC。 这种方法的问题在于,当源位于另一个网络中时,它不起作用。
以这样的方式编写服务器,即它从发送TCP请求的客户端请求此信息。这可以在TCP建立后完成。客户端还应该能够查找给定IP的机器MAC地址。
答案 2 :(得分:1)
arp源代码可在以下链接中找到,感谢您感兴趣的代码!它是c代码所以它应该可以正常工作。
http://www.opensource.apple.com/source/network_cmds/network_cmds-328/arp.tproj/arp.c