ICMP报文的源端口和目的端口

时间:2013-03-29 04:44:57

标签: linux-kernel netfilter

我正在netfilter中编写数据包过滤器。有没有办法可以获得ICMP数据包的源端口和目的端口?

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

1 个答案:

答案 0 :(得分:8)

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

ICMP是网络层的消息传递协议(在IP之上; but not really in the transport layer),它有很多责任,但没有一个与流程到流程的交付有关,所以没有任何意义的端口号。

举一个例子,当你ping(ping使用ICMP回应消息)一个IP地址时,你真正pinging哪个端口? 答案是:没有端口,你正在ping全站,看看它是否还活着。

现在,ICMP有很多types of messages;如果您要过滤掉ping消息,则应检查字段type,如果它等于ICMP_ECHO,则可以return NF_DROP