las*_*ash 5 netfilter linux-kernel
我正在netfilter中编写数据包过滤器.有没有办法可以获得ICMP数据包的源端口和目的端口?
我从sk_buff结构中提取了icmp_hdr.但我没有看到来自源地址和目的地址的任何属性?
端口号是TRANSPORT层识别哪个数据包属于终端系统中的哪个进程的方式.
他们习惯于让流程到流程的交付工作; 但从功能的角度来看,ICMP不是传输层协议.
ICMP是网络层的消息传递协议(在IP之上; 但实际上并不在传输层中),它有很多责任,但它们都没有与进程到进程交付有关,所以有一个没有任何意义的端口号.
举一个例子,当你ping(ping使用ICMP echo消息)一个IP地址时,你真的是哪个端口pinging?
答案是:没有端口,你正在ping全站,看看它是否还活着.
现在,ICMP有许多类型的消息 ; 如果你想过滤掉例如ping消息,你应该检查字段type,如果它等于ICMP_ECHO,你可以return NF_DROP.