关于Netfilter 对APR 数据包hook点的疑问
不明白Netfilter 对APR 时hook时挂接点的设置?
netfilter一共有5个挂接点,但是对AF_INET family ,对ARP的没发现有说明?
钩子名称 调用时机
NF_IP_PRE_ROUTING 完整性校验之后,路由决策之前
NF_IP_LOCAL_IN 目的地为本机,路由决策之后
NF_IP_FORWARD 数据包要到达另外一个接口去
NF_IP_LOCAL_OUT 本地进程的数据,发送出去的过程中
NF_IP_POST_ROUTING 向外流出的数据上线之前
这是open source NOarp设置的hook点,按道理说一个是挂接在NF_IP_PRE_ROUTING和NF_IP_POST_ROUTING 这两个地方;
但是NF_ARP_IN和NF_ARP_OUT是这两个吗???
/*************************************************************************************************/
/* Hooks Table
**************************************************************************************************/
static struct nf_hook_ops noarp_nf_ops_in =
{{ NULL, NULL }, noarp_infilter, NF_ARP, NF_ARP_IN, 0};
static struct nf_hook_ops noarp_nf_ops_out =
{{ NULL, NULL }, noarp_outfilter, NF_ARP, NF_ARP_OUT, 0};
The (idealized) IPv4 traversal diagram looks like the following:
netfilter architecture:
A Packet Traversing the Netfilter System:
--->[1]--->[ROUTE]--->[3]--->[4]--->
| ^
| |
| [ROUTE]
v |
[2] [5]
| ^
| |
v |
[ Local process]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
netfilter 中对PF_INET和NF_ARP使用不同的hook点。 对于NF_ARP hook点是在nf_hooks[NF_ARP][hook]上面
回复 2# linuxxtz
但是netfilter提供只要那几个hook点,ARP也应该是挂到这些点上吧?
难道还是其他地方?
请各位指点,多谢了!
回复 3# chary8088
netfilter是一个框架,它支持arptables, iptables, ipv6tables, ebtables。这些不同协议的hook点是不同的,你说的NF_IP_* hook点对应的是iptables的hook。 netfilter所有的hook都挂在 nf_hooks, nf_hooks是二维数组,定义:struct list_head nf_hooks[NPROTO][NF_MAX_HOOKS]; arptables关注的是nf_hooks[NF_ARP][]上的hook,这些hook点挂在下面的链上
#define NF_ARP_IN 0
#define NF_ARP_OUT 1
#define NF_ARP_FORWARD 2
非常感谢LS,那请问有ARP hook点的图吗?
那ARP是挂接那个地方?就是数据包流的那些点?
多谢
多谢
回复 5# chary8088
arptables的NF_ARP_IN是在接收arp,NF_ARP_OUT是在本机发送arp时, NF_ARP_FORWARD是在网桥模式下转发的arp。LZ可以跟踪一下源代码
2.4 的内核 好像只有 in和out,没有arp_forward的挂勾点,那应该怎样捕捉转发的arp包?
回复 7# ogmw
Why not port to 2.6/3.x kernel?