我正在尝试在交换环境中发送原始数据包后查找机器的MAC地址。我正在尝试实现traceroute命令。当我收到ICMP超时消息时,我想知道如何提取该机器的MAC地址。由于我是网络编程新手,因此不确定哪个套接字调用可以帮助我提取MAC地址。谢谢。
不可以从ICMP回复中提取MAC地址。 您只能确定与您相连的机器的MAC地址。在ICMP(tracert)中,您只能找到目标或中间机器的IP地址。 如果想检测MAC地址,应在本地网络中使用适用的ARP协议,而不是在互联网上。 ICMP协议从IPv4头开始[1],MAC地址与物理/链路层有关。在低层级中,MAC地址将从高层级(如网络(IP)或传输等)透明。 要确定MAC地址,您应该使用原始套接字或PCAP SDKs来访问网络编程的较低层。 (我再次强调,这些对互联网毫无用处)
一般而言,在互联网上,您甚至不知道主机用于传输数据包的媒体。假设远程主机通过PPP协议连接到串行rs-232-C链接。它没有MAC地址。例如,如果主机使用令牌环接口或帧中继链路,则也会发生这种情况。这使得确定主机的远程MAC地址完全成为本地问题。通常,当您从以太网上的远程站点获得数据包时,数据包中源MAC地址是将您连接到互联网的最后一个路由器的MAC地址,而不是发送IP数据包的原始主机的MAC地址。在关于鸟类承运人的IP RFC(rfc1149、rfc2549和rfc6214)中,用于传输的媒体不允许使用MAC地址(如果鸽子上有可行的链接地址,那么应该是其名称)。如果您想了解交换机以太网网络上的traceroute,请参阅IEEE802.1ag,该规范具有在交换机上执行tracerouting的功能(tracelink服务),但我认为这超出了本回答的范围。