首页 文章

通过本地接口发送和接收带有datalink原始套接字的ICMP

提问于
浏览
0

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

1 回答

  • 0

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

    不响应ICMP错误消息发送ICMP错误消息,以避免无限重复 . 对于分段的IP数据报,ICMP消息仅在碎片零(第一个片段)上发送错误 . 从不发送ICMP错误消息以响应发往广播或多播地址的数据报 . 从不发送ICMP错误消息以响应作为链路层广播发送的数据报 . 永远不会发送ICMP错误消息以响应源地址不代表唯一主机的数据报(源地址不能为零,环回地址,广播地址或多播地址) . 永远不会发送ICMP错误消息以响应任何类型的IGMP消息 . 收到未知类型的ICMP消息时,必须以静默方式丢弃该消息 .

    路由器几乎总是生成ICMP消息,但是当它到达目的主机时,生成的ICMP消息的数量取决于实现 .

相关问题