linux 网络
jerry_chg
努力 奋斗
展开
-
ICMP 协议报头分析与ping相关的疑问
ICMP协议是网络层中一个非常重要的协议,其全称为Internet Control Message Protocol(因特网控制报文协议),ICMP协议弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息 反馈。ICMP报头为:type(8)code(8)checksum(16)ID(16)原创 2013-09-28 17:48:52 · 2764 阅读 · 0 评论 -
Linux netfilter 学习笔记 之十一 ip层netfilter的NAT模块初始化以及NAT原理
1.NAT的原理NAT会修改数据包的ip层的源或者目的ip地址。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。1.1 SNAT源目的地址转换,即对ip数据包的源ip地址进行转换操作,典型的应用即是网关,网关的lan侧会下挂至少两台设备,而这两台设备的ip地址都是lan侧地址,而lan侧设备又要访问公网,这就需要SNAT大展身手了,通过将lan侧发送的ip数据包的源ip地原创 2014-07-01 23:00:34 · 6235 阅读 · 0 评论 -
Linux netfilter 学习笔记 之七 ip层netfilter的连接跟踪模块的概念及相关的数据结构分析
内核版本 2.6.16 连接跟踪(CONNTRACK)就是跟踪并且记录连接状态。包括 TCP 、UDP、ICMP 等协议类型的连接。其主要是判断该数据包是什么状态。根据数据包的源ip地址、目的ip地址、源端口、目的端口、协议号来确定一条连接。 因为连接跟踪支持TCP、UDP、ICMP等协议,而不同的协议,其处理上会有一些不同,因此增加了协议相关的连接跟踪结构,即nf_conntr原创 2014-06-26 00:13:40 · 6217 阅读 · 4 评论 -
Linux邻居协议 学习笔记 之四 通用邻居项创建、查找、删除等相关的函数
上节主要是分析了通用邻居层邻居项的垃圾回收机制,这一节主要是分析邻居项的创建、查找、删除等相关的函数,这一节只是介绍函数功能,而没有涉及状态机、通用邻居层的架构等。比如邻居项删除函数neigh_destroy,而这个函数主要是通过垃圾回收机制的调用才会执行删除操作;而对于邻居项创建函数neigh_create,在arp协议下,则在路由缓存与邻居项绑定时会触发调用neigh_create创建邻居项,原创 2014-03-21 22:38:37 · 4658 阅读 · 0 评论 -
Linux netfilter 学习笔记 之十三 netfilter的SNAT模块是否支持UDP打洞
1.SNAT转换的特殊处理linux netfilter模块中,对于SNAT转换有什么特殊处理吗?在nat模块中,当对连接跟踪项进行NAT转换时,会调用get_unique_tuple获取一个唯一的nf_conntrack_tuple变量,而在该函数中,对于SNAT,会调用函数find_appropriate_src判断已进行过NAT转换的连接跟踪项中,是否存在源ip、端口与当前需要进行S原创 2014-07-09 22:27:03 · 3469 阅读 · 0 评论 -
Linux 路由 学习笔记 之一 相关的数据结构
从现在开始学习路由相关的代码,在分析代码之前, 我们还是先分析数据结构,把数据结构之间的关系理解了以后,再理解代码就相对轻松多了。本小节先分析路由相关的数据结构。内核里面大多模块定义的数据结构之间一般都是使用链表或者hash表实现连接操作。对于路由表,相关的数据结构有fib_table、fn_hash、fn_zone、fib_node、fib_alias、fib_info、fib_nh等, 下原创 2014-07-31 23:43:17 · 4940 阅读 · 0 评论 -
Linux netfilter 学习笔记 之三 ip层netfilter的table、rule、match、target结构分析
上一节分析了ip层hook回调函数的注册以及调用流程,本节我们就开始分析每一个模块的具体实现。 工欲善其事必先利其器,一个功能模块的代码实现与其数据结构的设计有很大的关系,所以我们本节主要是分析table、rule、match、target相关的数据结构,争取本节能把数据结构的定义以及数据结构之间的关系分析明了。 在分析table、rule、match、target之前,先把它们之间的联系原创 2014-06-22 14:35:18 · 11072 阅读 · 7 评论 -
Linux netfilter 学习笔记 之十五 netfilter模块添加一个match
通过这段时间的学习,基本上熟悉了netfilter模块,为了进一步加深对netfilter的认识以及理解iptables与netfilter的联系,准备添加一个match模块。 在看到网关产品会有一个公网限制的功能,就想着添加一个公网数目限制的功能。 该模块实现的功能, 通过该match我们可以设置能够通过网关上网的数目,要想进行公网限制,就需要根据mac地址进行限制操作,这个模块原创 2014-07-24 21:11:26 · 7291 阅读 · 0 评论 -
Linux netfilter 学习笔记 之十二 ip层netfilter的NAT模块代码分析
本节主要是分析NAT模块相关的hook函数与target函数,主要是理清NAT模块实现的原理等。 1.NAT相关的hook函数分析NAT模块主要是在NF_IP_PREROUTING、NF_IP_POSTROUTING、NF_IP_LOCAL_OUT、NF_IP_LOCAL_IN四个节点上进行NAT操作,在上一节中我们知道nat表中只有PREROUTING、POSTROUTING、LOC原创 2014-07-04 00:36:37 · 14167 阅读 · 2 评论 -
Linux netfilter 学习笔记 之十 ip层netfilter的连接跟踪模块 学习小结
对于linux代码,如果说只是为了理解连接跟踪模块的工作原理原创 2014-06-29 21:31:27 · 2308 阅读 · 0 评论 -
Linux netfilter 学习笔记 之六 ip层netfilter的filter表的创建及其hook函数分析
Linux netfilter 学习笔记 之五 ip层netfilter的filter表的创建及hook函数分析 今天主要在前两节的基础上,分析filter表的创建,以及filter表的hook回调函数的分析。1. Filter模块初始化在前面分析表的注册时,我们知道要注册一个新的xt_table,需要实例化xt_table与ipt_replace这两个结构体。创建fi原创 2014-06-24 20:55:31 · 3753 阅读 · 0 评论 -
Linux netfilter 学习笔记 之五 ip层netfilter的table中规则的匹配检查
通过上面一节的分析我们知道,我们通过iptables -A操作添加的规则,都会保存在一个xt_table->private->entries[]中,所以当数据到来后,协议栈执行NF_HOOK操作时,肯定需要遍历xt_table->private->entries中的规则,找到一个匹配的规则,然后对进来的数据包执行该规则的target操作。从xt_table的通用性,我们可以猜到,肯定会有一个通用的原创 2014-06-23 00:47:04 · 6586 阅读 · 3 评论 -
Linux netfilter 学习笔记 之四 ip层netfilter的table注册及规则的添加
既然我们都已经将xt_table、rule、match、target的结构体之间的联系都已经分析清楚了,那我们接下来分析表的注册、表中规则的添加、表中规则的删除、表中规则的替换也应该比较容易了。 在上节分析时,我们应该有注意到一个细节,即xt_table_info->entries[]是指向每一个CPU对应于该xt_table的所有规则的首地址,而一个表里面所有的规则是按照连续内存存取的。原创 2014-06-22 19:02:33 · 6056 阅读 · 1 评论 -
Linux netfilter 学习笔记 之一 HOOK机制的分析与应用
ddddd原创 2014-06-19 23:29:33 · 8081 阅读 · 5 评论 -
Linux netfilter 学习笔记 之二 ip 层netfilter的hook 注册以及执行hook函数的概要分析
上一节分析了hook机制,本节简单介绍下三层防火墙借助hook机制,实现的总体框架 1 三层netfilter hook点的注册与注销我们知道使用iptables,添加规则时需要指定表,在iptables中有filter、nat、mangle三张表,因为我们接下来几节分析的内容也是从这三个table表加上连接跟踪,此处我们也已这四个模块来将,而不是按HOOK点的分类来分析1.1 f原创 2014-06-21 23:42:13 · 9073 阅读 · 2 评论 -
Linux inet_select_addr分析
主要是阅读arp相关的代码时遇到了这个函数。主要是在发送arp请求时,若产生请求的主机有多个ip地址时,通过该函数获取到最佳的ip地址。 __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope){ __be32 addr = 0; struct in_device原创 2013-08-24 16:01:37 · 3470 阅读 · 0 评论