@
zone10 的确如你所说,以下是 chatgpt 的回答:
在 Linux 系统中,当你使用 `gopacket` 自己构造 ICMP Echo Request 并发送给自己(本地回环地址 127.0.0.1 ),操作系统的内核并不会自动处理这个 ICMP 请求,因为这个请求在内核的 ICMP 协议栈中是不会被处理的。
当其他主机向你的主机发送 ICMP Echo Request 时,这个请求会经过网络接口,到达内核的网络协议栈。内核会处理 ICMP Echo Request ,然后根据协议处理机制,产生 ICMP Echo Reply 并通过网络接口发送回去。
但当你自己使用 `gopacket` 构造 ICMP Echo Request 并发送给自己时,数据包并不会经过网络接口,而是直接从应用程序发送到内核中的数据包处理层。在这种情况下,内核的 ICMP 协议栈并不会处理这个 ICMP Echo Request ,因为这个请求并没有经过网络接口。
因此,当你使用 `gopacket` 构造 ICMP Echo Request 并发送给自己时,你自己的应用程序需要负责处理这个 ICMP Echo Request ,并且根据需要产生 ICMP Echo Reply 并回复给自己。如果你希望收到 ICMP Echo Reply ,你需要在你的程序中对 ICMP Echo Request 进行相应的处理。