免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2007 | 回复: 9
打印 上一主题 下一主题

【新手请教】DNAT后,如何在应用程序中获取一个连接DNAT前的目的地址和端口? [复制链接]

handoff 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-18 13:33 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2009-01-18 17:34 |只看该作者
据我所知,好像没有API能做到,需要你自己写
handoff 该用户已被删除
3 [报告]
发表于 2009-01-18 19:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2009-01-19 15:19 |只看该作者
getsockopt (clifd, SOL_IP, SO_ORIGINAL_DST, &orig_addr, &sin_size);
==========
.........................................

[ 本帖最后由 fly6 于 2009-1-19 16:57 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-01-19 16:47 |只看该作者
所有的连接跟踪都通过ip_conntrack_tuple_hash[0]和ip_conntrack_tuple_hash[1]链在哈希表ip_conntrack_hash中,
ip_conntrack_tuple_hash其实就是ip_conntrack_tuple.目的转换是在连接跟踪之后做的,连接的信息在做nat转换之前就已经建立好了,也就是说original tuple  和 reply tuple 就被设置了.另外特别注意的是任何NAT处理规则都不会对
original方向的tuple进行改变,只是对reply方向的的tuple按规则进行改变.
我们举个例子:
iptables -t nat -A PREROUTING -d 20.0.0.1/8 -j DNAT --to-destination 10.0.30.1:80
假设src ip 192.168.30.1 sport 100, 访问 dst ip 20.0.0.1 dport 200

在连接跟踪建立之后,nat之前
original方向的tuple应该是192.168.30.1/100---------20.0.0.1/200
reply方向的tuple应该是   20.0.0.1/200-------------  192.168.30.1/100

nat之后应该是
original方向是 192.168.30.1/100----------20.0.0.1/200
reply方向是    10.0.30.1/80----------------192.168.30.1/100


包在进入了你的客户监听程序后,你得到的socket的信息192.168.30.1/100---10.0.30.1/80 还有socket的协议(udp,tcp)等信息.
你把这些信息封装到一结构里,然后传入内核,内核得到信息后可以自行构建tuple,你这里可以构建reply tuple,并通过他找到连接跟踪信息,再由连接跟踪信息取orgin tuple,就可以得到转换前的地址啦

[ 本帖最后由 fly6 于 2009-1-19 16:52 编辑 ]
handoff 该用户已被删除
6 [报告]
发表于 2009-01-19 19:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
handoff 该用户已被删除
7 [报告]
发表于 2009-01-19 19:39 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2009-01-20 10:10 |只看该作者
那就是有现成的可用
呵呵,有是最好的啦

论坛徽章:
0
9 [报告]
发表于 2009-01-20 10:21 |只看该作者
内核中getorigdst函数的实现和我说的一样

论坛徽章:
0
10 [报告]
发表于 2009-03-06 14:22 |只看该作者

get_ip_str

请问一下6楼的,get_ip_str(ip_str, &saddr)是什么函数啊,要包含什么头文件?还是你自己写的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP