以NF_INET_PRE_ROUTING为例,当数据包到达NF_INET_PRE_ROUTING钩子点时,会按照以下顺序执行相关操作: 1. 新的报文:先经过ip_recv,然后到达PREROUTING HOOK点。 2. 优先级NF_IP_PRI_CONNTRACK:执行NF_IP_PRI_CONNTRACK优先级的规则。 3. 优先级NF_IP_PRI_MANGLE:执行NF_IP_PRI_MANGLE优先级的规则。 4. ...
NF_IP_*和NF_IP6_*都不能用在新的内核,内核/内核模块要用NF_INET_*。我记得没错的话,这种转变是从2.6.25的内核开始,当时还没有NF_INET_*,全部都用NF_IP系列的。现在,NF_IP_*只是为了兼容用户程序而保留的,一般应该用NF_INET_*。你可以理解成变量换了个名字。
.owner = THIS_MODULE, .pf = PF_INET, .hooknum = NF_IP_PRE_ROUTING, .priority = NF_IP_PRE_CONNTRACK + 1, }; static int __init init(void) { int ret; ret = nf_register_hook(ip_match_ops);//注册自己的Hook函数 if(ret < 0) goto cleanup_hook; return ret; cleanup_hook: nf_u...
nfho.hook = hook_func; nfho.hooknum = NF_INET_PRE_ROUTING; nfho.pf = PF_INET; nfho.priority = NF_IP_PRI_FIRST; nf_register_hook(&nfho); return 0; } void cleanup_module(void){ nf_unregister_hook(&nfho); } 根据数据包的不同,结果可能不同,但是,MAC、IP和TCP层之间的相对位置是...
.hooknum = NF_INET_PRE_ROUTING, .priority = NF_IP_PRI_CONNTRACK + 1, }, }; static int __init test_info_init(void) { int err; err = nf_register_hooks(ipv4_conn_dst_info, ARRAY_SIZE(ipv4_conn_dst_info)); if (err) {
在玩netfilter时遇到的一个问题,我的hook点在NF_INET_POST_ROUTING,而dnat是在NF_IP_PRE_ROUTING就处理了的。 在我的hook里检查发往内网的包,发现dst ip的确已经被改正了,但是mac仍然是网关的mac,想问下数据包的mac是何时被改正为内网机子的mac呢?在这个hook里能否获取到目标的mac?linux...
xt_hooknum(par) == NF_INET_LOCAL_OUT || xt_hooknum(par) == NF_INET_LOCAL_IN); ct = nf_ct_get(skb, &ctinfo); netmask = ~(mr->range[0].min_ip ^ mr->range[0].max_ip);if(xt_hooknum(par) == NF_INET_PRE_ROUTING || ...
xt_hooknum(par) == NF_INET_LOCAL_IN); ct = nf_ct_get(skb, &ctinfo); netmask = ~(mr->range[0].min_ip ^ mr->range[0].max_ip);if(xt_hooknum(par) == NF_INET_PRE_ROUTING || xt_hooknum(par) == NF_INET_LOCAL_OUT) ...
.hooknum = NF_INET_PRE_ROUTING, .priority = NF_IP_PRI_CONNTRACK + 1, }, }; static int __init test_info_init(void) { int err; err = nf_register_hooks(ipv4_conn_dst_info, ARRAY_SIZE(ipv4_conn_dst_info)); if (err) {
.hooknum = NF_INET_PRE_ROUTING, .priority = NF_IP_PRI_CONNTRACK + 1, }, }; static int __init cache_dst_and_sock_demo_init(void) { int ret; ret = nf_register_hooks(ipv4_conn_cache_ops, ARRAY_SIZE(ipv4_conn_cache_ops)); ...