原标题:Linux网络子系统安全性模块详细分析之文件nf_nat_core.c
2.4.3 文件三nf_nat_core.c2.4.3.1 文件描述
该文件的路径是nf_nat_core.c。
该文件是nat机制的主要处理文件,涉及到最终的网络地址转换,包括原IP、原端口与目的IP、目的端口的转化。
2.4.3.2 主要变量及宏定义
无
2.4.3.3 结构体定义1. nf_conntrack_tuple结构体:struct nf_conntrack_tuple {
struct nf_conntrack_man src;
struct {
union nf_inet_addr u3;
union {
__be16 all;
struct {
__be16 port;
} tcp;
struct {
__be16 port;
} udp;
struct {
u_int8_t type, code;
} icmp;
struct {
__be16 port;
} dccp;
struct {
__be16 port;
} sctp;
struct {
__be16 key;
} gre;
} u;
u_int8_t protonum;
u_int8_t dir;
} dst;
};
连接跟踪中获取数据报基本信息结构体,描述了数据包的来源或者去向,记录了ip、端口号、数据包的方向以及协议类型。
2.4.3.4 外部函数
参见2.4.1和2.4.2
2.4.3.5 内部函数1.find_appropriate_src( )
函数原型:static intfind_appropriate_src(struct net *net, u16 zone,const struct nf_conntrack_tuple *tuple, struct nf_conntrack_tuple *result,const struct nf_nat_ipv4_range *range)
函数参数:net表示网络名称,tuple表示连接跟踪的信息,result表示连接跟踪的信息 。
函数功能:用于确定ip地址、端口等是否在合适的范围,并且定义了一个nf_conn_nat结构的变量nat,结构体中的成员bysource是一个hash链表,把即将进行NAT操作的连接都放到这个hash表里。
返回值:成功返回0,反之返回1。
2.get_unique_tuple( )
函数原型:static void get_unique_tuple(struct nf_conntrack_tuple *tuple,const struct nf_conntrack_tuple *orig_tuple,const struct nf_nat_ipv4_range *range,struct nf_conn *ct,enum nf_nat_manip_type maniptype)
函数参数:tuple表示连接跟踪的信息,oring表示已有连接跟踪的信息,ct表示连接状态信息,maniptype表示方向,进或者出。
函数功能:get_unique_tuple( )函数调用find_appropriate_src( )确定ip地址、端口等是否在合适的范围,并且定义了一个nf_conn_nat结构的变量nat,结构体中的成员bysource是一个hash链表,把即将进行NAT操作的连接都放到这个hash表里;从用( )内网指定的地址范围中搜索一个最少使用的ip分给内网的机子;最后会调用nat协议的操作集调用unique_tuple成员函数。
返回值:无。
3.nf_nat_setup_info( )
函数原型:unsigned int nf_nat_setup_info(struct nf_conn *ct, const struct nf_nat_ipv4_range *range,enum nf_nat_manip_type maniptype)
函数参数:ct表示连接状态信息,maniptype表示方向,进或者出。
函数功能:函数中调用get_unique_tuple( )来获取唯一的tuple五元组,之后函数返回到nf_nat_packet继续执行,最终调用manip_pkt( )来完成ip和端口的转换。返回值:返回1,代表数据包被接收。
4.manip_pkt( )
函数原型:static boolmanip_pkt(u_int16_t proto,struct sk_buff *skb,unsigned int iphdroff,const struct nf_conntrack_tuple *target,enum nf_nat_manip_type maniptype)
函数参数:proto表示传输协议,skb表示传输的数据包,iphdroff表示ip头的偏移量,target表示目的处理信息,maniptype表示方向,进或者出。
函数功能:完成原ip、原端口到目的ip、目的端口的转换。
返回值:成功则返回1。
5.nf_nat_packet( )
函数原型:unsigned int nf_nat_packet(struct nf_conn *ct,enum ip_conntrack_info ctinfo,unsigned int hooknum,struct sk_buff *skb)
函数参数:ct表示连接状态信息,hooknum表示钩子点的位置。
函数功能:根据nf_nat_setup_info做包处理。
返回值:数据包符合条件返回1,否则返回0。
6.nf_nat_protocol_register( )
函数原型:int nf_nat_protocol_register(const struct nf_nat_protocol *proto)
函数参数:proto表示具体协议。
函数功能:有关nat处理的协议注册。
返回值:成功返回0,反之返回相应的错误码。
7.nf_nat_protocol_unregister( )
函数原型:void nf_nat_protocol_unregister(const struct nf_nat_protocol *proto)
函数参数:proto表示具体协议。
函数功能:有关nat处理的协议注销。
责任编辑: