4

我试图在发送原始数据包后找出交换环境中机器的mac地址。我正在尝试实现 traceroute 命令。我想知道当我收到 ICMP 超时消息时如何提取该机器的 mac 地址。我是网络编程的新手,所以很困惑什么套接字调用将帮助我提取 mac 地址。

谢谢 。

4

3 回答 3

4

不,您不能从 ICMP 回复中提取 MAC 地址。

只能确定您旁边的链接机器的 MAC 地址。在 ICMP(tracert) 中,您可以找到目标或中间机器的 IP 地址。

如果您想检测 MAC 地址,您应该使用适用于本地网络而非 Internet 的 ARP 协议。

ICMP 协议在 IPv4 标头[ 1 ] 之后开始,MAC 地址与物理/链路层有关。在低层中,MAC 地址将从网络(IP)或传输等顶层透明...

要确定 MAC 地址,您应该使用原始套接字或PCAP SDK来访问较低层的网络编程。(我再说一遍,这些在互联网上没有用)

于 2011-10-19T13:11:01.420 回答
0

就像 Masoud M 所说,您只能获取本地网络上机器的 MAC 地址。也就是说,您可以解析arp命令的输出以查找给定本地网络机器 IP 地址的 MAC 地址。

于 2011-10-19T13:48:35.073 回答
0

通常,在 Internet 上,您甚至不知道主机用于传输数据包的媒体。假设远程主机通过 PPP 协议的串行 rs-232-C 链路连接。它没有mac地址。例如,如果主机使用令牌环接口或帧中继链路,也会发生这种情况。这使得确定主机的远程 MAC 地址完全成为本地问题。通常,当您通过以太网从远程站点获取数据包时,您在数据包中获得的源 MAC 地址是最后一个将您链接到 Internet 的路由器,而不是发送 IP 数据包的原始主机。在关于 IP over avian carrier(rfc1149、rfc2549 和 rfc6214)的 RFC 中,用于传输的媒体不允许使用 mac 地址(如果在 pidgeon 上可行的话,链接地址将是它的名称)

If you want to read about traceroute on ethernet network of switches, perhaps you had to have a look at the IEEE802.1ag, that has an specification to do tracerouting over switches (tracelink service) but I think is far over the scope of this answer.

于 2015-09-04T10:01:46.287 回答