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