Linux kernel ICMP数据包的源端口和目标端口

Linux kernel ICMP数据包的源端口和目标端口,linux-kernel,netfilter,Linux Kernel,Netfilter,我正在netfilter中编写一个包过滤器。有没有办法获取ICMP数据包的源端口和目标端口 我已经从sk_buff结构中提取了icmp_hdr。但是我没有从源地址和目标地址中看到任何属性?端口号是传输层识别哪个数据包属于终端系统中的哪个进程的方式。 他们习惯于让流程到流程交付工作;但是,从功能的角度来看,ICMP不是一个传输层协议 ICMP是网络层的消息传递协议(位于IP之上),它有很多职责,但它们都与进程到进程的传递无关,因此在那里设置端口号没有任何意义 例如,当您使用IP地址进行ping时(

我正在netfilter中编写一个包过滤器。有没有办法获取ICMP数据包的源端口和目标端口


我已经从sk_buff结构中提取了icmp_hdr。但是我没有从源地址和目标地址中看到任何属性?

端口号是传输层识别哪个数据包属于终端系统中的哪个进程的方式。
他们习惯于让流程到流程交付工作;但是,从功能的角度来看,ICMP不是一个传输层协议

ICMP是网络层的消息传递协议(位于IP之上),它有很多职责,但它们都与进程到进程的传递无关,因此在那里设置端口号没有任何意义

例如,当您使用IP地址进行ping时(ping使用ICMP回显消息),您真正要ping哪个端口?
答案是:没有端口,您正在ping整个电台以查看它是否还活着

现在,ICMP有很多;例如,如果要过滤掉
ping
消息,应检查字段
type
,如果它等于
ICMP\u ECHO
,则可以
返回NF\u DROP