1.
netfitler/iptables提供了QUEUE动作,在内核中由ip_queue模块完成动作的处理;
netfitler/iptables扩展模块NFQUEUE ,在内核中由xt_NFQUEUE和nfnetlink_queue完成动作的处理。
2.
ip_queue在加入内核时,调用nf_register_queue_handler()向系统queue_handler数组注册一个处理ipv4协议的数据包处理函数;
而使用NFQUEUE,则需要应用层调用nfq_bind_pf()来向系统queue_handler数组注册一个处理ipv4协议的数据包处理函数。
3.匹配到数据包后,内核处理过程如下:
nf_hook_slow()->nf_queue()->__nf_queue()->qh = rcu_dereference(queue_handler[pf])
此时,系统中若是ip_queue注册的处理ipv4数据包的函数,则调用ip_queue的处理函数ipq_enqueue_packet();若是nfnetlink_queue注册的处理ipv4数据包的函数,则调用nfnetlink_queue的处理函数nfqnl_enqueue_packet()。
此时,就可区分将包导入ipqueue还是nfqueue。
阅读(4307) | 评论(0) | 转发(0) |