发送ICMP ping

时间:2015-02-10 18:20:10

标签: c macos ping icmp raw-sockets

对于ICMP ping请求(echo请求),我是否需要获取目标的MAC地址?我试图学习如何使用原始套接字在C中实现它,但无法理解如何获取目标的MAC地址。

感谢任何帮助。 感谢。

1 个答案:

答案 0 :(得分:3)

  

[...]我需要获取目的地的MAC地址吗?

在大多数情况下,不,你不应该。

raw(7)的手册页(我的重点):

  

原始套接字允许在用户空间中实现新的IPv4协议。原始套接字接收或发送原始数据报,不包括链接级标题

这是合乎逻辑的,因为您可能ping - 不在同一子网上的东西,在这种情况下,MAC地址将是路由器的MAC地址。

为了证明这一点,hereping的旧BSD版本的一些源代码 - 我在Google上找到的第一个。请注意,它不会尝试查找目标MAC地址。

请注意,某些UNIX ping程序会执行各种有趣的操作。例如,某些版本允许您欺骗传出的源IP。某些版本包含arping功能。在这些情况下,它们将在较低级别(链接级别)注入内容,在这种情况下,您将需要原始标题。