linux网络模块包括,Linux网络子系统安全性模块详细分析之文件nf_nat_core.c

原标题: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处理的协议注销。

责任编辑:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值