免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6449 | 回复: 20

[内核模块] 编写钩子函数实现端口重定向与端口复用 [复制链接]

论坛徽章:
0
发表于 2013-03-24 01:03 |显示全部楼层
请问有人如何在netfilter下编写钩子函数实现端口重定向和端口复用吗?内核源码下的端口重定向可以参考nat源码,可是太过庞大了,看得不太明白。至于端口复用,就更没有思路了。试问有人可以给我提供一点内核下具体的实现步骤吗?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2013-03-25 10:44 |显示全部楼层
回复 1# liziaiya
请问有人如何在netfilter下编写钩子函数实现端口重定向和端口复用吗?内核源码下的端口重定向可以参考nat源码,可是太过庞大了,看得不太明白。至于端口复用,就更没有思路了。试问有人可以给我提供一点内核下具体的实现步骤吗?


内核里面nat的代码不是太多啊。况且,实现你的端口重定向的功能,只需要调用内核现有的函数就可以了,不需要写多少代码。这里有个之前写的代码,可以看一下:http://blog.chinaunix.net/uid-20662820-id-142455.html

你所谓的端口复用不知道具体要实现什么功能?
   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2013-03-26 10:44 |显示全部楼层
回复 1# liziaiya
端口重定向不是有 REDIRECT  target 可用吗


   

论坛徽章:
0
发表于 2013-03-27 17:06 |显示全部楼层
我试着看了那篇文章,我将生成的.so文件手动放在/lib/xtables目录下,将生成的.ko文件放在内核目录下,然后执行相同的命令,发现不可行。我想问问,还要不要执行其他的命令什么的?
谢谢啦!
   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2013-03-27 17:14 |显示全部楼层
回复 4# liziaiya
需要将内核模块加载上。insmod *.ko

BTW:把错误贴出来吧,不好猜啊。



   

论坛徽章:
0
发表于 2013-03-27 17:27 |显示全部楼层
       我自己设置了一下,发现redirect一般不可用,snat和dnat倒是可以,请问是这样吗? 我主要是想编写类似redirect功能的内核模块,进行端口重定向,看源码中,就是对struct  nf_nat_range newrange 里面的max_ip和min_ip进行设置,那么若是改变端口,是不是另设置max_proto和min_proto为一样的目的端口号,然后return nf_nat_setup_info(ct, &newrange, IP_NAT_MANIP_DST)就可以了吗?至于数据包里如daddr,dest都不用在钩子函数下更改的吗?
       求大神回复,谢谢啦!

   

论坛徽章:
0
发表于 2013-03-27 18:25 |显示全部楼层
可能由于版本的关系,之前libipt_NETDNAT.c生成不了libipt_NETDNAT.so,于是将NETDNAT_target由iptables_target换为了xtables_target结构,这个应该没关系吧!
这是加载模块时的贴图:

zl@zl:/lib/modules/3.2.0-39-generic-pae/kernel/net/ipv4/netfilter$ sudo modinfo ipt_NETDNAT.ko
[sudo] password for zl:
filename:       ipt_NETDNAT.ko
description:    iptables net snat
author:         LTW <tingw.liu@gmail.com>
license:        GPL
srcversion:     99AEC778EF637E2EC3D9518
depends:        x_tables,nf_nat
vermagic:       3.2.0-32-generic-pae SMP mod_unload modversions 686
zl@zl:/lib/modules/3.2.0-39-generic-pae/kernel/net/ipv4/netfilter$ sudo modprobe x_tables
zl@zl:/lib/modules/3.2.0-39-generic-pae/kernel/net/ipv4/netfilter$ sudo modprobe nf_nat
zl@zl:/lib/modules/3.2.0-39-generic-pae/kernel/net/ipv4/netfilter$ sudo insmod ipt_NETDNAT.ko
insmod: error inserting 'ipt_NETDNAT.ko': -1 Invalid parameters
zl@zl:/lib/modules/3.2.0-39-generic-pae/kernel/net/ipv4/netfilter$

这个是什么原因呀?

论坛徽章:
0
发表于 2013-03-27 19:49 |显示全部楼层
回复 3# Godbach
我自己设置了一下,发现redirect一般不可用,snat和dnat倒是可以,请问是这样吗? 我主要是想编写类似redirect功能的内核模块,进行端口重定向,看源码中,就是对struct  nf_nat_range newrange 里面的max_ip和min_ip进行设置,那么若是改变端口,是不是另设置max_proto和min_proto为一样的目的端口号,然后return nf_nat_setup_info(ct, &newrange, IP_NAT_MANIP_DST)就可以了吗?至于数据包里如daddr,dest都不用在钩子函数下更改的吗?
       求大神回复,谢谢啦!

   

   

论坛徽章:
0
发表于 2013-03-27 19:54 |显示全部楼层
回复 5# 瀚海书香

模块加载出错insmod: error inserting 'ipt_NETDNAT.ko': -1 Invalid parameters,dmesg里显示如下信息
[23263.106692] ipt_NETDNAT: disagrees about version of symbol nf_nat_setup_info
[23263.106695] ipt_NETDNAT: Unknown symbol nf_nat_setup_info (err -22)
[23263.106698] ipt_NETDNAT: disagrees about version of symbol xt_register_target
[23263.106700] ipt_NETDNAT: Unknown symbol xt_register_target (err -22)
[23263.106704] ipt_NETDNAT: disagrees about version of symbol xt_unregister_target
[23263.106706] ipt_NETDNAT: Unknown symbol xt_unregister_target (err -22)





   

论坛徽章:
0
发表于 2013-03-27 21:09 |显示全部楼层
回复 9# liziaiya


    原来是编译路径写过时了,后来又出错
/lib/xtables/libipt_NETDNAT.so: /lib/xtables/libipt_NETDNAT.so: undefined symbol: exit_error
iptables v1.4.12: unknown option "--netdnat"
Try `iptables -h' or 'iptables --help' for more information.

于是将libipt_NETDNAT.c中的exit_error全部换为xtables_error(不知道为什么要这样换),然后
iptables -t nat -A PREROUTING -d 192.168.19.0/24 -j NETDNAT --netdnat 192.168.19.0/24-192.168.18.0/24
又出现新的错误
iptables: target "NETDNAT" has version "1.4.0", but "libxtables.so.7" is required.

{:3_201:}

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP