【问题标题】:How can I extract mac address from a icmp reply in c on linux如何从linux上c中的icmp回复中提取mac地址
【发布时间】:2011-10-19 11:10:56
【问题描述】:

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

谢谢。

【问题讨论】:

标签: c sockets icmp raw-sockets


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 那么为了实现在第 2 层跟踪路由的 traceroute mac 命令,我应该如何进行?
  • 你可以使用"An Ethernet Address Resolution Protocol"的ARP。没有通过 Internet 检索 MAC 的标准方法。
【解决方案2】:

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

【讨论】:

  • 那么为了实现在第 2 层跟踪路由的 traceroute mac 命令,我应该如何进行?
  • @JitenShah,您是在谈论routemyworld.com/2009/05/01/layer-2-traceroute 中描述的 Cisco 第 2 层跟踪路由吗?如果是这样,则需要使用思科专有的思科发现协议。您可能可以使用开放的链路层发现协议做类似的事情,但是沿途的设备需要实现该协议,您必须阅读文档以了解如何发现设备是如何互连的。还要注意的是,CDP 和 LLDP 仍然仅限于本地网络,并且无法在 LAN 之外获取 MAC 地址。
  • 谢谢。是的,我在谈论 CDP。在那种情况下,我希望实现那么我应该如何明智地进行算法?我无法想象这对 layer 2 是如何工作的。当你说:traceroue mac1 mac2 那么这是如何工作的呢?是我需要使用 RARP(反向)并找出 nthe 命令中使用的两个设备的 IP,然后在第 3 层执行跟踪路由,它将获取 IP,然后使用 ARP 获取中间设备的 MAC 地址。 CDP 如何帮助我?
【解决方案3】:

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

如果您想了解交换机以太网网络上的跟踪路由,也许您必须查看 IEEE802.1ag,它有一个规范可以在交换机上进行跟踪路由(tracelink 服务),但我认为远远超出了范围这个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2013-02-27
    相关资源
    最近更新 更多