对于ICMP ping请求(echo请求),我是否需要获取目标的MAC地址?我试图学习如何使用原始套接字在C中实现它,但无法理解如何获取目标的MAC地址。
感谢任何帮助。 感谢。
答案 0 :(得分:3)
[...]我需要获取目的地的MAC地址吗?
在大多数情况下,不,你不应该。
从raw(7)
的手册页(我的重点):
原始套接字允许在用户空间中实现新的IPv4协议。原始套接字接收或发送原始数据报,不包括链接级标题。
这是合乎逻辑的,因为您可能ping
- 不在同一子网上的东西,在这种情况下,MAC地址将是路由器的MAC地址。
为了证明这一点,here是ping
的旧BSD版本的一些源代码 - 我在Google上找到的第一个。请注意,它不会尝试查找目标MAC地址。
请注意,某些UNIX ping
程序会执行各种有趣的操作。例如,某些版本允许您欺骗传出的源IP。某些版本包含arping
功能。在这些情况下,它们将在较低级别(链接级别)注入内容,在这种情况下,您将需要原始标题。