0

我正在学习 Linux 上的数据链路原始套接字编程,我发现了这些有用的示例。我编译了 icmp4_ll.c,并用它向同一 LAN 中的另一台计算机发送 ICMP 数据包。我可以收到来自目标计算机的回复。但是,当我使用它向本地计算机发送ICMP数据包时,即我将源和目标以太网MAC和IP地址设置为eth0的MAC和IP地址时,我无法在eth0或lo上收到ICMP回复接口(在 Wireshark 中,我只注意到通过 eth0 发送的 ICMP 请求,但在任何接口上都没有 ICMP 回复。)我认为 ICMP 请求消息组成正确,(否则远程目的地不会回复)。但我不知道为什么操作系统不回复请求。任何帮助或提示表示赞赏。

4

1 回答 1

0

RFC 792为 ICMP 消息定义了特殊条件:

  • 不发送 ICMP 错误消息以响应 ICMP 错误消息,以避免无限重复。

  • 对于分段的 IP 数据报,仅针对分段零(第一个分段)上的错误发送 ICMP 消息。

  • ICMP 错误消息永远不会发送以响应发往广播或多播地址的数据报。

  • ICMP 错误消息永远不会响应作为链路层广播发送的数据报。

  • ICMP 错误消息永远不会响应源地址不代表唯一主机(源地址不能为零、环回地址、广播地址或多播地址)的数据报。

  • ICMP 错误消息永远不会响应任何类型的 IGMP 消息而发送。当收到未知类型的 ICMP 消息时,它必须被静默丢弃。

路由器几乎总是会生成 ICMP 消息,但是当涉及到目标主机时,生成的 ICMP 消息的数量取决于实现。

于 2014-03-30T08:52:40.870 回答