【发布时间】:2017-05-23 22:53:51
【问题描述】:
我为 linux 内核中的传入数据包编写了一个 netfilter 钩子函数。有没有办法从钩子函数中获取接收套接字信息。代码是
register() {
hk.hook = hookfunction;
hk.hooknum = NF_INET_PRE_ROUTING;
hk.pf = PF_INET;
hk.priority = NF_IP_PRI_LAST;
}
static unsigned int hookfunction (void *priv,struct sk_buff,const struct nf_hook_state *state) {
if (skb->sk) {
printk("%d", skb->sk->sk_mark);
}
}
假设我在端口 15000 上打开了一个 udp 套接字,并且一个 udp 数据包到达端口 15000。在上面编写的钩子函数中,我如何访问在端口 15000 上打开的 udp 套接字的 struct sock。使用上面的代码,控件没有传递 if(skb->sk) 条件,就好像 skb->sk 为空一样。您能否建议我一种获取套接字结构袜子的方法,或者我是否必须将钩子放在其他位置,例如 NF_INET_LOCAL_IN,。我也对 NF_INET_XX_XX 和 NF_IP_XX_XX 之间的区别感到困惑。
【问题讨论】:
标签: android linux kernel hook netfilter