Linux下通过iptables抓取tcp连接

1.1.1   iptables原理

 

1.1.2   以本地为源的包路径

Step

Table

Chain

Comment

1

 

 

本地程序(比如,服务程序或客户程序)

2

 

 

路由判断,要使用源地址,外出接口,还有其他一些信息。

3

mangle

OUTPUT

在这儿可以mangle包。建议不要在这儿做过滤,可能有副作用哦。

4

nat

OUTPUT

这个链对从防火墙本身发出的包进行DNAT操作。

5

filter

OUTPUT

对本地发出的包过滤。

6

mangle

POSTROUTING

这条链主要在包DNAT之后(译者注:作者把这一次DNAT称作实际的路由,虽然在前面有一次路由。对于本地的包,一旦它被生成,就必须经过路由代码的处理,但这个包具体到哪儿去,要由NAT代码处理之后才能确定。所以把这称作实际的路由。),离开本地之前,对包 mangle。有两种包会经过这里,防火墙所在机子本身产生的包,还有被转发的包。

7

nat

POSTROUTING

在这里做SNAT。但不要在这里做过滤,因为有副作用,而且有些包是会溜过去的,即使你用了DROP策略。

8

 

 

离开接口(比如: eth0)

9

 

 

在线路上传输(比如,Internet)

1.1.3   规则添加

从上面可以看出只需要在OUTPUT链增加如下的类似规则即可实现将特定ip + porttcp连接劫持到本地某个端口即可

       目的ip: 200.200.30.228 端口443

       本地ip: 200.200.30.122, 端口28888

       iptables -t nat -A OUTPUT -p tcp -d 200.200.30.228 -j DNAT --dport 443 --to-destination 200.200.30.122:28888

       测试OK

1.1.4   相关处理

(1)    依赖于iptables工具

(2)    应用层如何获取对应关系?

其实这个时候可以通过netstat命令发现如下奇怪的现象:

 

同时和200.200.30.228443端口和本地28888端口建立了连接,

所以这里也可以获取到原来要连接的资源和端口

 

SO_ORIGINAL_DST是一个socket参数(SOL_IP层的)。
   调用方式如下:
   getsockopt (clifd, SOL_IP, SO_ORIGINAL_DST, &orig_addr, &sin_size);
   clifd是hijack到的客户socket,orig_addr是sockaddr_in结构的参数,sin_size=sizeof(sockaddr_in).
   返回0如果成功,-1失败。
   如果成功orig_addr将是客户真正需要去的方向

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值