转载请注明出处
前几天有个需求,研究了一番如果要过滤或者拦截ARP数据包要怎么做呢?目前大概就研究出了三种方式,其中方式一,二都是在linux3.9下面研究的,不同内核版本,有些函数名称可能不一样
方法一:
大家都知道经典的netfilter的五个hook,具体是哪五个hook这里就不说了,网上随便一搜一大堆资料,但是想经过这5个hook,必须要从ip_rcv函数进入,才会走这5个hook的钩子函数,arp数据包是走arp_rcv 的,如下图所示,arp_rcv和ip_rcv是互斥的,只能走一个,那么如果要过滤或者拦截ARP数据包,就得考虑在arp_rcv 这边入手了,幸运的是在arp的处理过程中也有三个hook,分别是NF_ARP_IN,NF_ARP_OUT,NF_ARP_FORWARD,arptables命令的实现,就是在这三个地方下钩子的。这三个