linux五元组结构体,NF_HOOK conntrack 分析[nf_conn结构体分析篇] 三

一 nf_conn结构体分析

对于nf_conn的分析主要是针对3.6内核,相对于之前的结构体有很大的变化。先看一下新的结构体的定义

a4c26d1e5885305701be709a3d33442f.png

其中有一个结构体nf_conntrack_expect,它到底是有什么作用呢。比如我们常用的FTP协议,在经过带有NAT的路由器的时候我们经常听到FTP穿透功能,为什么FTP要进行穿透呢。那么首先得从FTP的原理入手:

FTP两种工作模式:主动模式(Active FTP)和被动模式(Passive FTP)

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT

N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT

P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

举例: 主动模式当我们PC通过NAT的路由器连接外部的网络的过程中,如果NAT未被特殊处理的话,比如sr_port:1200,

dst_port 21,NAT完成之后可能就成为src_port:1300, dst_port

21,当服务器传输数据的时候他只会根据收到的包,将端口+1,这样,数据传输的话就靠src_port 21, dst_port

1301,这样就没法到达PC端了。

因此针对这种情况,linux

kernel使用了nf_conntrack_expect这种方法,针对特殊的端口,比如FTP,通过下面的代码对conn进行了处理,有兴趣可以具体分析一下:

exp->expectfn

= nf_nat_follow_master;

二 结构体联系图

上面的几个重要的结构体,他们的组织图大体如下:

a4c26d1e5885305701be709a3d33442f.png

三 nf_conn的初始化流程

首先要初始化nf_conn变量,那么就要从init_conntrack进行分析

a4c26d1e5885305701be709a3d33442f.png

然后根据连接的五元组数据,进行exp的查找,如果exp有相应的helper,将它通过nf_conn进行绑定,创建con_helper结构体。

a4c26d1e5885305701be709a3d33442f.png

执行到这里就到了上面FTP的expectfn函数,对ct进行了处理。

a4c26d1e5885305701be709a3d33442f.png

总结:

对于conntrack里面几个重要的结构体nf_conn

nf_conn_help nf_conntrack_expect,可以通过仔细分析一下NAT

FTP部分,加深对于三个结构体联系的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值