如何从linux上的c中的icmp回复中提取mac地址

时间:2011-10-19 11:10:57

标签: c sockets icmp raw-sockets

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

谢谢。

3 个答案:

答案 0 :(得分:4)

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

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

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

ICMP协议在IPv4标头[1]和MAC地址与物理/链路层相关后启动。在低级别层中,MAC地址将从顶级层透明,例如网络(IP)或传输,......

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果你想阅读有关交换机的以太网网络上的traceroute,也许你必须看看IEEE802.1ag,它有一个规范来对交换机进行跟踪(tracelink服务),但我认为远远超出范围这个答案。