2013-03-29 146 views
4

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

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

回答

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