编程如何 通过netfilter 修改 目标ip地址

头发不多的程序员 2022-06-23 09:34:30

我现在获取到v6地址:

iph6 = ipv6_hdr(skb);

现在想要修改目标地址怎么设置?

我的代码如下

iph6->daddr = in_aton("64:ff9b::c0a8:6437");

这里就报错了,


./include/linux/inet.h:52:15: note: expected ‘const char *’ but argument is of type ‘char **’
 extern __be32 in_aton(const char *str);
 

如果是ipv4地址就没问题,请问应该怎么办?

...全文
589 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

求大神帮忙!在线急

1 基于Linux 的防火墙技术研究 宋文功1 唐 琎2 (1.中南大学网络中心,湖南长沙510630;2.中南大学信息科学与工程学院,湖南长沙410075) 摘 要:介绍了防火墙的基本概念及其主要功能,分析了Linux 内核防火墙Netfilter 的架构、构建防火墙的工作原 理及其与内核的交互.最后给出了Netfilter 构建防火墙的一个实例。 关键词:防火墙 Linux Netfilter 包过滤 中图分类号:TN393 文献标识码:A Study of the technology of firewall based on Linux SONG Wen-gong1 Tang Jin2 (1.Central South University, Changsha 510630,China; 2. Central South University, Changsha 410075,China) Abstract:The basic concept and most functions of firewall were introduced here.It analysed the frame of netfilter,explained how to interact between kernel.Finally,a case study of using netfilter as a firewall was given. Key words:firewall;Linux; Netfilter;packet filtering 因特网的个人用户和集体用户正在快速增长,因特网在全世界范围内可共享的信息也越来越丰 富,同时随之而来的是信息系统的安全性显得越来越重要。特别是近来,黑客入侵和网络病毒大爆 发时有发生,各国政府都在加强在网络安全技术方面的研究。为了有效隔离来自Internet 的外部入 侵,防火墙(firewall)技术正在普及中。除了信息加密技术外,防火墙是当前最重要的一种网络安全 技术。 防火墙实际上是一种访问控制技术,主要作用是通过限制网络或某一特定区域的通信,阻止对信 息资源的非法访问和防止保密信息从受保护网络上非法输出。它是提供信息安全服务,实现网络和 信息安全的基础设施。 1 Linux 防火墙的功能 目前市场上有许多商用防火墙软件出售,但它们大多价格高昂,使许多个人及小企业用户难以承 受。Linux 的出现给了我们一个新的选择。它提供了一套完全免费的解决方案,其内置防火墙功能非 常强大,甚至超过了许多昂贵的商用软件。 1.1 包过滤功能 根据数据包的包头中某些标志性的字段,对数据包进行过滤。当数据包到达防火墙时,防火墙 根据包头中的某些字段中的一些或全部进行判断,决定接受还是丢弃数据包。包过滤可能发生在以 下几个时刻:接收到数据包时,发送数据包时以及转发数据包时。Linux 中过滤包的方法如下: (1)将包头和过滤规则逐一进行匹配。 (2)第一条与包匹配的规则将决定以下采取的行动:首先,此规则指定的策略将被应用到该包 上。应用在一个包的策略包括以下几种:接受(Accept),即允许包通过该过滤器;抛弃(Reject),即丢掉该 包并发一个“主机不可到达”的ICMP 报文回发送者;拒绝(Deny),即丢掉该包且不发任何返回信息。 其次,修改此规则对应的包和字节计数器的值;再次,一些关于包的信息会有选择性地被写入日志 中。有的规则中可能含有参数来定义如何改写包头的服务类型(TOS)字段,用于确定不同包的优先级。 (3)如果没有与包相匹配的过滤规则,则将对该包采取缺省的过滤规则。Linux 的包过滤规则可 包含如下一些信息: ·源地址和目的地址以及子网掩码,其中子网掩码中的0 表示可以匹配任何地址; ·包的类型,可以是TCP,UDP,ICMP 或“any”; ·源和目的端口号,一条规则中可以指定10 个以上的端口,也允许指定端口范围; ·ICMP 报文类型; 基金项目:国家自然科学基金资助项目(60234030) 2 ·包中的ACK 和SYN 标志,这是为了防止在某个特定方向上建立新的链接; ·某块网卡的名字或IP 地址,这样可以指定在特定的网卡上进出包; ·指定是否修改包头的TOS 字段; ·用一个标志来确定包的一些基本信息是否要被写入日志中。 1.2 代理服务功能 一个完整的防火墙解决方案不仅包括包过滤器,而且应该包括某种类型的应用层代理服务器。所 谓代理服务,是指在防火墙上运行某种软件(称为代理程序),如果内部网需要与外部网通信,首先 要建立与防火墙上代理程序的连接,把请求发送到代理程序;代理程序接收该请求,建立与外部网 相应主机的连接,然后把内部网的请求通过新连接发送到外部网相应主机。反之亦然。概括的说, 就是内部网和外部网的主机之间不能建立直接的连接,而是要通过代理服务进行转发。代理服务器 具有用户级的身份验证,完备的日志记录和帐号管理等较包过滤器更加安全的功能。然而,许多代理机 制需要客户端修改软件或修改用户接口,使用户意识到正在使用代理服务器。而Linux 内核支持透明 代理服务功能,透明代理用一种完全透明的方式,将一个经过本防火墙的连接重定向到本地代理服务 器.客户端(用户和软件)完全不知道他们的连接被一个代理进程处理,他们认为自已在直接和指定的 服务器对话。 1.3 包伪装功能 Linux 核心提供了一个用于防火墙解决方案的附加功能:IP 包伪装。IP 包伪装是Linux 中的一 种网络功能,它只能用于TCP/UDP 包,它能使没有Internet 地址的主机通过有Internet 地址的主机访问 Internet。如果一台Linux 服务器用IP包伪装功能连接到Internet 上,那私接上它的电脑即使没有获 得正式指定的IP 地址也可以接入Internet.这些电脑可以隐藏在Linux 服务器后面存取Internet 上的信 息而不被发现,看起来就好象是服务器在使用Internet。Linux 服务器实现代理功能的方法如下:当一 个内部主机向外发包时, Linux 服务器在转发此 IP 包之前,用自已IP 地址替换此包的源IP 地址, 并临时产生一个本机端口号来替换此包的 TCP/UDP 头中的源端口号;同时,内核会记录下 此替换.当外部的返回包到来时(送往防火墙主机 的临时端口),服务器能自动识别它,将此返回包 的IP 地址和端口号替换成内部主机的地址和端 口号,发给内部主机。分组过滤方式如下图1 所示。 通过这种IP 包伪装方式, Linux 方便地实现 了“代理”功能。从外部看来,所有包的收发都 是针对此Linux 主机的,所以具有很好的安全性。 2 Linux 数据包过滤系统—Netfilter/Iptables Linux 在其2.4 内核中内置了一个基于网络层解决方案的防火墙系统—Netfilter/Iptables,它使得 用户能够很方便地在网络边界定制对数据包的各种控制,如有状态或无状态的包过滤、各种类型的网 络地址转换、流量控制及高级的包处理等。Netfilter/Iptables 系统采用模块化的架构方式,其主要模块 有:通用框架Netfilter、数据包选择系统、连接跟踪系统及NAT系统等等。 2.1 Netfilter/Iptables 系统工作原理 Netfilter/Iptables 系统所提供的数据包控制能力(包过滤、网络地址转换、包处理等)都是由内核 模块通过注册回调函数和“IP 表”来实现的。例如,iptable_filter.o 模块通过注册filter 表及3 个回调 函数(NF_IP_LOCAL_IN;NF_IP_FORWARD;NF_IP_LOCAL_OUT)来实现IPv4 包的过滤功 能。下面以iptable_filter.o 模块的工作流程为例简单介绍一下Netfilter/Iptables 系统是如何工作的。 当数据包进入系统时,系统首先根据路由表决定数据包的流向(即将数据包发往那个关键点),则可能 有三种情况: 图1 分组过滤示意图 3 如果数据包的目的地址是其它主机或网络,则系统将该包发往forward 关键点。此时,回调函数NF _IP_FORWARD 根据FORWARD 链(在filter 表中)中的规则对数据包进行检查,如果规则匹配,则回 调函数按规则所指定的动作来处理该包,否则丢弃该包。2)如果数据包的目的地址是本机,则系统将数 据包发往input 关键点。此时,回调函数NF_IP_LOCAL_IN 根据INPUT 链(在filter 表中)中的规则 对数据包进行检查,如果规则匹配,则回调函数就按规则所指定的动作来处理该包,否则丢弃该包。3) 如果该数据包的源地址是本机,则系统将该包发往output 关键点。此时,回调函数NF_IP_LOCAL_ OUT 根据OUTPUT 链(在filter 表中)中的规则对数据包进行检查,如果规则匹配,则回调函数按规则所 指定的动作来处理该包,否则丢弃该包。 2.2 Netfilter 内核框架 Netfilter 是Linux2.4.x 内核中用于包处理的抽象、通用化的框架,它为每种网络协议(IPv4、IPv6 等)定义一套钩子函数(hook),其中IPv4 定义了5 个钩子函数.内核的模块可以对每种协议注册多个钩 子,这样当某个数据包通过Netfilter 框架时,Netfilter 检测是否有任何模块对该协议和钩子函数进行了 注册.若有,则将该数据包传给这些模块处理.Netfilter 提供了数据包过滤(filter 表),网络地址转换(NAT 表)及数据包处理(mangle 表)三种数据包处理能力.下面以Filter 表为例加以简单介绍. Filter 表为系统 缺省,其结构如下图.该表中包含了输入(INPUT)、输出(OUTPUT)和转发(FORWARD)3 条链.所有目标 地址指向本机的数据包会遍历INPUT 链,本地发出的数据包将遍历OUTPUT 链,而被转发的数据包将 遍历FORWARD 链。每一条链中都可设 定一条或数条规则,每一条规则都是这 样定义的“如果数据包头符合这样的条 件,就这样处理这个数据包”.当一个数据 包到达一个链时,系统就会从第一条规 则开始检查,看是否符合该规则所定义 的条件.如果满足,系统将根据该条规则 所定义的方法处理该数据包;如果不满 足则继续检查下一条规则。最后,如果 该数据包不符合该链中任何一条规则的 话,系统就会根据该链预先定义的策略 (Policy)来处理该数据包。 Netfilter 提供了传递数据包到用户空间的Hook 函数,对数据包进行处理的代码不必运行在内核 空间,大大简化了编程.Netfilter 的框架结构,可方便地插入各种模块,易于扩展。 2.3 内核与用户的交互 防火墙除了内核里的机制外,还需要在应用层有相应的配置工具iptables,它是从三个默认的表 Filter、Nat、Mangle 而得名,每个表有几条链。一条链就是发生在包L 的一系列动作,例如Filter 表就有INPUT、FORWARD、OUTPUT 三个不同的默认链。如果包过滤需要检查IP 包,则netfilter 框架在网络层截获IP 包,这就需要与用户定义的规则做比较。而这些规则的添加修改是通过内核和 用户交互实现的,这就涉及一个如何与内核通信的问题。内核模块有三种办法与进程打交道:首先 是系统调用;第二种办法是通过设备文件;第三个办法便是使用proc 文件系统。netfilter 采用了第 一种修改系统调用的办法。ipables 在应用层调用setsockopt 进入内核,然后调用netfilter. c 又件中 nbetsockopt()实现交互,这样通过配置防火墙就可以按需要处理网络数据包。只有熟悉了iptables 提供的众多命令、选项等,在明白其工作原理的前提下,用户才能利用它未放心地创建大量的规则 记录和策略去控制内核数据包,才能正确有效地使用防火墙。这样即使在图形界而下使用防火墙, 通过点击你也明明白白内核里发生了什么。 3 防火墙配置实例 图2 filter 表结构 4 假设有一个局域网要连接到Internet 上,公共网络地址为202.101.2.25。内部网的私有地址采用C 类地址192.168.0.0~192.168.255.0 具体操作步骤如下:第一,一台Linux 主机上安装2 块网卡ech0 和ech1,给ech0 网卡分配一个 内部网的私有地址191.168.100.0,用来与Internet 相连;给ech1 网卡分配一个公共网络地址 202.101.2.25,用来与Internet 相连;第二, Linux 主机上设置进入、转发、外出和用户自定义链。本文 采用先允许所有信息可流入和流出,还允许转发包,但禁止一些危险包,如IP 欺骗包、广播包和ICMP 服务类型攻击包等的设置策略。具体设置如下: (1) 清除所有规则/sbin/ipchains-Fforward/sbin/ipchain s-Finput/sbin/ipchains-Foutput (2) 设置初始规则/sbin/ipchains-Ainput-jACCEPT/sbin/ip chains-Aoutput-jACCEPT/sbin/ipchains-AforwardjACCEPT (3) 设置本地环路规则/sbin/ipchains-Ainput-jACCEPT-ilo/s bin/ipchains-Aoutput-jACCEPT-ilo (4) 禁止IP欺骗/sbin/ipchains-Ainput-jDENY-iech1-s 192.168.100.0/24/ s b in/ i p c h a i n s-A i n p u t-j D E N Y-i e c h1- d 192.168.100.0/24/sbin/ipchains-Aoutput-jDENY-iech1-s 192.168.100.0/24/sbin/ipchains-Aoutput-jDENY-iech1-d 192.168.100.0/24/ s b in/ i p c h a i n s-A i n p u t-j D E N Y-i e c h1- s 202.101.2.25/32/sbin/ipchains-Aoutput-jDENY-iech1-d 202.101.2.25/32 (5) 禁止广播包/sbin/ipchains-Ainput-jDENY-iech0-s 255.255.255.255/sbin/ipchains-Ainput-jDENY-iech0-d0.0..0.0/s bin/ipchains-Aoutput-jDENY-iech0-s240.0.0.0/3 (6) 设置ech0 转发规则/sbin/ipchains-Aforword-jMASQ-ie ch0-s192.168.100.0/24 (7) 设置ech1 转发规则/sbin/ipchains-Aforword-jACCEPTiech1- s192.168.100.0/24/sbin/ipchains-Aforword-jACCEPTiech1- d192.168.100.0/24 通过以上各步骤的配置,可以建立一个基于Linux 操作系统的包过滤防火墙。它具有配置简单、 安全性高和抵御能力强等优点。 4 结束语 安全总是相对和无止境的,防火墙有其固有的局限性。人们必须时刻保持高度警惕去防止新的 攻击,动态跟踪系统的安全状况,开发新的功能和采取新的策略。本文通过分析netfilter 构建防火 墙的机制与技术,利用实例讲解了利用netfilter 框架编程实现新功能,这种分析有利于研究人员去 开发新的好的功能,用防火墙去努力保障主体的安全。 参考文献: [1] The netfilter framework in linux 2.4[EB/OL]. http://www.gnumonks.org/ [2] Linux 2.4 netfilter hacking HOWTO[EB/OL]. http:/ netfilter.kernelnotes.org/ [3] 徐辉,潘爱民,阳振坤.Linux 防火墙的原理与实现[J].计算机应用,2002,(1). [4] 梁如军.RedHat7.0 安装配置与管理[M].北京:清华大学出版社,2001. [5] RobertZiegler. 余青霞,周钢译.Linux防火墙[M].北京:人民邮电出版社,2000.10 [6] 黄允聪,严望佳,防火墙的选型、配置、安装和维护[M].北京:清华大学出版社,1999.45~108 [7] 原箐,卿斯汉.基于安全数据结构的防火墙[J]计算机科学,2001(8):56~60 5 作者简介(Author’s brief introduction): 1、宋文功(1966-),男,汉族,硕士(Male. Master.)。中南大学网络中心,工程师。 毕业院校:北京邮电学院。 研究方向:计算机通信(Researching for computer communications)。 通信地址:长沙市韶山南路22 号中南大学网络中心 邮编:510630 2、唐琎(1966-),男,汉族,博士(Male. Doctor.)。中南大学信息科学与工程学院,副教授。 研究方向:计算机应用 (Researching for computer applications)。 毕业院校:北京大学.
第1 章Linux操作系统概述................... .......................................................................... 2 1.1 Linux发展历史........................................................ 2 1.1.1 Linux的诞生和发展.............................................. 2 1.1.2 Linux名称的由来........................................ ........ 3 1.2 Linux的发展要素...................................................... 3 1.2.1 U N I X操作系统.................................................. 4 1.2.2 Minix操作系统.................................................. 4 1.2.3 POSIX 标准.....................................................4 1.3 Linux 与 U N I X 的异同.................................................. 5 1 . 4 操作系统类型选择和内核版本的选择..................................... 5 1.4.1常见的不同公司发行的Linux异同................................. 6 1.4.2 内核版木的选择..................................................6 1.5 Linux的系统架构...................................................... 7 1.5.1 Linux内核的主要模块............................................ 7 1.5.2 Linux的文件结构................................................ 9 1.6 G N U 通用公共许可证..................................................10 1.6.1 G P L许可证的历史.............................................. 10 1.6.2 G P L 的白由理念................................................ 10 1.6.3 G P L 的基本条款................................................ 11 1.6.4关于G P L 许町证的争议......................................... 12 1.7 Linux软件开发的可借鉴之处........................:.................. 12 1-8 .................................................................13 第2 章Linux编程环境....................................................................................................14 2.1 Linux环境下的编辑器................................................. 14 2.1.1 v i m使用简介...................................................14 2 . 1 . 2使用v i m建立文件.............................................. 15 2 . 1 . 3使用v i m编辑文本.............................................. 16 2.1.4 v i m的格式设置.................................................18 目录 2.1.5 vim 配置文件....................................................................................................... .. 2 . 1 . 6 使用其他编辑器................................................................................................... 2.2 Linux下的G C C 编译器工具集.......................................... 19 2.2.1 G C C 简介......................................................19 2 . 2 . 2 编译程序的基本知识......................................................................................... 21 2.2.3 .单个文件编译成执行文件........................................ 22 2 . 2 . 4编译生成目标文件.............................................. 22 2 . 2 . 5多文件编译............ ........................................ 23 2.2.6 预处理........................................................ 24 2 . 2 . 7编译成汇编语言.................................................24 2 . 2 . 8生成和使用静态链接库.......................................... 25 2 . 2 . 9生成动态链接库.................................................26 2.2.10动态加载库................................................... 29 2.2.11 G C C 常用选项................................................ 31 2 . 2 . 1 2编译环境的搭建................................................33 2.3 Makefile 文件简介.....................................................34 2.3.1 一个多文件的工程例子............................. ............. 34 2 . 3 . 2多文件工程的编译.............................................. 36 2.3.3 Makefile 的规则.................................................37 2.3.4 Makefile 中使用变量............................................ 39 2 . 3 . 5搜索路径...................................................... 43 2 . 3 . 6自动推导规则.................................................. 44 2.3.7 递归 make......................................................44 2.3.8 Makefile 中的函数.............................................. 46 2 . 4 用G D B 调试程序..................................................... 47 2 . 4 . 1编译可调试程序.................................................48 2.4.2 使用G D B 调试程序............................................. 49 2.4.3 G D B 常用命令..................................................52 2.4.4 其他的 G D B ....................................................59 2.5 顿.................................................................60 第3 章文件系统简介........................................................ 61 3.1 Linux下的文件系统.................................................. 61 3.1.1 Linux下文件的内涵............................................. 61 3.1.2 文件系统的创建................................................. 62 3 . 1 . 3挂接文件系统.................................................. 64 3.1.4 索弓丨节点 inode.......... •'...................................... 65 3.1.5 普通文件...................................................... 66 3 . 1 . 6设备文件...................................................... 66 3 . 1 . 7虚拟文件系统V F S .............................................. 68 目录 3.2 文件的通用操作方法................................................. 72 3 . 2 . 1文件描述符.................................................... 72 3 . 2 . 2打开创建文件open()、create()函数................................ 72 3 . 2 . 3关闭文件closeO函数............................................ 76 3 . 2 . 4读取文件read()函数............................................. 77 3.2.5 写文件write()函数.............................................. 79 3 . 2 . 6文件偏移lseekO函数............................................ 80 3 . 2 . 7获得文件状态fstat()函数.....................•'................... 83 3 . 2 . 8文件空间映射m m a p ()函数....................................... 85 3 . 2 . 9文件属性fcntl()函数............................................. 88 3. 2 . 1 0文件输入输出控制ioctl()函数....................................92 3.3 socket文件类型....................................................... 93 3.4 /J、@ .................................................................93 第4 章程序、进程和线程.................................................... 94 4 . 1 程序、进程和线程的概念.............................................. 94 4 . 1 . 1程序和进程的差别............................................ ’."94 4.1.2 Linux环境下的进程............................................. 95 4 . 1 . 3进程和线程.................................................... 96 4 . 2 进程产生的方式...................................................... 96 4.2.1 进程号........................................................ 96 4.2.2 进蟬复制 fork()................................................. 97 4.2.3 system()方式....................................................98 4.2.4 进程执行exec()函数系列......................................... 99 4 . 2 . 5所有用户态进程的产生进程init................................. 100 4 . 3 进程间通信和同步................................................... 101 4.3.1 半双工管道................................................... 101 4.3.2 命名管道..................................................... 107 4.3.3 消息队列..................................................... 108 4 . 3 . 4消息队列的一个例子........................................... 114 4.3.5 信号量......................... .............................. 116 4 . 3 . 6共享内存..................................................... 121 4.3.7 信号.......................................................... 124 4.4 Linux下的线程...................................................... 127 4 . 4 . 1多线程编程实例................................................127 4.4.2 Linux 下线程创建函数 pthread_create()............................ 129 4.4.3 线程的结束函数 pthread_join()和 pthread_exit().....................129 4.4.4 线程的属性................................................... 130 4 . 4 . 5线程间的互斥................................................. 132 4 . 4 . 6线程中使用信号量..............................................133 • VII • n 录 4-5 純............................................................... 136 第2 篇Linux用户层网络编程 第5 章T C P / I P协议族简介.................................................. 138 5.1 O S I网络分层介绍....................................................138 5.1.1 O S I网络分层结构............................................. 138 5.1.2 O S I的7 层网络结构........................................... 139 5.1.3 O S I参考模塑中的数据传输..................................... 140 5.2 TCP/IP 协议找....................................................... 141 5.2.1 TCP/IP协议栈参考模型......................................... 141 5 . 2 . 2主机到网络层协议............................................. 143 5.2.3 IP 协议....................................................... 144 5.2.4 网际控制报文协议(ICMP) .................................... 146 5.2.5 传输控制协议(TCP) ......................................... 150 5 . 2 . 6用户数据报文协议(U D P ) ..................................... 154 5 . 2 . 7地址解析协议(A R P) ......................................... 156 5.3 IP地址分类与T C P / U D P端U .......................................... 158 5 . 3 . 1因特网中IP地址的分类........................................ 159 5.3.2 子网掩码(subnet mask address) ................................ 161 5.3.3 IP地址的配置................................................. 162 5.3.4 端口......................................................... 163 5 . 4 主机字节序和网络字节序............................................. 163 5 . 4 . 1字节序的含义................................................. 164 5 . 4 . 2网络字节序的转换............................................. 164 5.5 /J、@ ........................................................... .....166 第6 章应用层网络服务程序简介...................... ;..................... 167 6.1 H T T P协议和服务....................................................167 6.1.1 H T T P 协议概述.................................................167 6.1.2 H T T P协议的基本过程.......................................... 168 6.2 F T P协议和服务......................................................170 6.2.1 F T P协议概述..................................................170 6.2.2 F T P协议的工作模式........................................... 172 6.2.3 F T P协议的传输方式........................................... 172 6.2.4 —个简单的F T P过程........................................... 173 6.2.5 常用的F T P工具............................................... 173 6.3 T E L N E T协议和服务................................................. 174 6 . 3 . 1远程登录的基本概念........................................... 174 • VIII • 目录 6 . 3 . 2使用T E L N E T协议进行远程登录的工作过程...................... 174 6.3.3 T E L N E T 协议................................................. 174 6.4 N F S 协议和服务......................................................176 6.4.1 安装N F S服务器和客户端...................................... 176 6 . 4 . 2服务器端的设定................................................176 6 . 4 . 3客户端的操作................................................. 177 6.4.4 showmount 命令................................................177 6 . 5 自定义网络服务..................................................... 177 6.5.1 xinetd/inetd....................................................178 6.5.2 xinetd月艮务配置................................................178 6 . 5 . 3自定义网络服务............................................... 179 6.6 小结................................................................180 第7 章T C P 网络编程基础...............................................181 7.1 套接字编程基础知识................................................. 181 7.1.1 套接字地址结构................................................181 7 . 1 . 2用户层和内核层交互过程....................................... 183 7.2 T C P 网络编程流程................................................... 184 7.2.1 T C P网络编程架构............................................. 184 7 . 2 . 2创建网络插口函数socket()...................................... 186 7.2.3 绑定一个地址端口对bind()......................................189 7.2.4 监听本地端口 listen............................................ 192 7.2.5 接受一个网络请求acceptO...................................... 194 7 . 2 . 6连接H 标网络服务器connect()................................... 199 7.2.7 写入数据函数writeO........................................... 200 7 . 2 . 8读取数据函数readO............................................ 201 7 . 2 . 9关闭套接字函数close()......................................... 201 7 . 3 服务器/客户端的简单例子............................................ 202 7.3.1 例子功能描述........................................... ......202 7 . 3 . 2服务器网络程序................................................203 7 . 3 . 3服务器读取和显示字符串....................................... 205 7 . 3 . 4客户端的网络程序............................................. 205 7 . 3 . 5客户端读取和显示字符串....................................... 206 7 . 3 . 6编译运行程序................................................. 206 7 . 4 截取信号的例子..................................................... 207 7.4.1 信号处理..................................................... 207 7.4.2 信号 SIGPIPE..................................................208 7.4.3 信号 SI G INT.................................... •.............. 208 7.5 /J、g ................................................................208 • IX • 第8 章服务器和客户端信息的获取...........................................210 8 . 1 字节序............................................................................................................................210 8 . 1 . 1 大端字节序和小端字节序...............................................................................210 8 . 1 . 2 字节序转换函数................................................................................................212 8.1.3 一个字节序转换的例子......................................... 214 8 . 2 字符串I P地址和二进制IP地址的转换................................. 217 8.2.1 inet_xxx()函数................................................. 217 8.2.2 inet_pton()和 inet_ntop()函数.....................................219 8 . 2 . 3使用8.2.1节地址转换函数的例子............................ .•••••••220 8.2.4 使用函数 inet_pton()和函数 inet—ntop()的例子......................223 8 . 3 套接字描述符判定函数issockettype()................................... 223 8 . 3 . 1进行文件描述符判定的函数issockettypeO.........................224 8.3.2 main()g| 数.................................................... 224 8.4 IP地址与域名之间的相互转换................................................................................. 225 8.4.1 D N S 原理.....................................................225 8 . 4 . 2获取主机信息的函数........................................... 226 8 . 4 . 3使用主机名获取主机信息的例子................................. 228 8 . 4 . 4函数gethostbyname()不可重入的例子............................. 230 8 . 5 协议名称处理函数................................................... 232 8.5.1 xxxprotoxxx()函数............................................. 232 8 . 5 . 2使用协议族函数的例子......................................... 233 8.6 小结................................................................236 第9 章数据的I O和复用....................................................237 9.1 IO 函数.......................................................................................................................... 237 9 . 1 . 1使用recv()函数接收数据........................................237 9 . 1 . 2 使用sendO函数发送数据................................................................................239 9 . 1 . 3 使用readvO函数接收数据..............................................................................240 9 . 1 . 4 使用writev()闲数发送数据.............................................................................240 9 . 1 . 5使用recvmsgO函数接收数据.................................... 242 9 . 1 . 6 使用sendmsgO函数发送数据.........................................................................244 9.1.7 I O函数的比较.................................................246 9.2 使用I O函数的例子.................................................. 246 9 . 2 . 1客户端处理框架的例子......................................... 246 9 . 2 . 2服务器端程序框架............................................. 248 9.2.3 使用 recv()和 send()函数........................................ 249 9.2.4 使用 readv()和 write()函数.......................................251 9.2.5 使用 recvmsgO和 sendmsg()函数..................................253 9.3 10 模型............................................................. 256 9 . 3 . 1阻塞I O模型.................................................. 256 • X • 目录 9 . 3 . 2非阻塞1 0模型................................................ 257 9.3.3 10 复用....................................................... 257 9 . 3 . 4信号驱动I O模型.............................................. 258 9 . 3 . 5异步I O模型.................................................. 258 9.4 select()函数和 pselect()函数............................................ 259 9.4.1 select()闲数.................................................... 259 9.4.2 pselect()函数...................................................261 9.5 poll()函数和 ppoll()函数............................................... 262 9.5.1 poll()函数..................................................... 263 9.5.2 p p o l l O ® ^ .................................................... 264 9 . 6 非阻塞编程.......:.................................................. 264 9 . 6 . 1非阻塞方式程序设计介绍....................................... 264 9 . 6 . 2非阻塞程序设计的例子......................................... 264 9.7 小结................................................................266 第1 0章基于U D P 协议的接收和发送...................................... ,...267 10.1 U D P 编程框架......................................................267 10.1.1 U D P 编程框图................................................ 267 10.1.2 U D P 服务器编程框架.......................................... 269 10.1.3 U D P 客户端编程框架.......................................... 269 10.2 U D P 协议程序设计的常用函数....... :................................270 10.2.1建立套接字socket()和绑定套接字bind()......................... 270 10.2.2 接收数据 recvfrom()/recv()......................................270 10.2.3 发送数据 sendtoO/sendO...............................................................................275 10.3 U D P 接收和发送数据的例子.......................................... 279 10.3.1 U D P 服务器端................................................ 279 10.3.2 U D P 服务器端数据处理........................................280 10.3.3 U D P 客户端..................................................281 10.3.4 U D P 客户端数据处理.......................................... 281 10.3.5 测试 U D P 程序............................................... 282 10.4 U D P 协议程序设计中的几个问题......................................282 10.4.1 U D P 报文丢失数据............................................ 282 10.4.2 U D P 数据发送中的乱序........................................284 10.4.3 U D P 协议中的 connect()函数....................................287 10.4.4 U D P 缺乏流量控制............................................ 287 10.4.5 U D P 协议中的外出网络接口....................................289 10.4.6 U D P 协议中的数据报文截断....................................290 10.5 小结.............................................................. 291 第1 1章高级套接字........................................................ 292 11.1 U N I X 域函数.......................................................292 • XI • 目录 11.1.1 UNIX域函数的地址结构..............................................................................292 1 1 .1 .2套接字函数.................................................................................................... 293 11 . 1 . 3 使用UNIX域函数进行套接字编程............................................................ 293 11.1.4传递文件描述符.............................................. 296 11.1.5 socketpair()闲数............................................................................................. 296 11.1.6传递文件描述符的例子.................................................................................297 11.2 广播............................................................................................................................. 302 11.2.1 广播的IP地址............................................................................................... 302 11.2.2广播与单播的比较......................................................................................... 303 11.2.3 广播的示例.....................................................................................................304 1 1 . 3多播................................................ 11.3.1多播的概念....................... 1 1 .3 .2广域网的多播................... 11.3.3多播的编程....................... 11.3.4 内核中的多播................... 11.3.5 一个多播例子的服务器端 11.3.6 —个多播例子的客户端•••• 1 1 . 4数据链路层访问........................... 11.4.1 SOCK_PACKET 类型…… 11.4.2设置套接U 以捕获链路帧的编程方法............................ 320 11.4.3从套接口读取链路帧的编程方法................................ 321 11.4.4定位IP包头的编程方法....................................... 322 11.4.5定位T C P报头的编程方法..................................... 323 11.4.6定位U D P 报头的编程方法..................................... 325 11.4.7定位应用层报文数据的编程方法................................ 326 11.4.8使用S O C K _ P A C K E T编写A R P 请求程序的例子................. 326 11.5 329 第1 2章套接字选项........................................................330 12.1 获取和设置套接字选项 getsocketopt()/setsocketopt()......................330 12.1.1 getsockopt()函数和 setsocketopt()函数的介绍......................330 12.1.2套接字选项................................ ..................331 12.1.3套接字选项简单示例.......................................... 332 12.2 S O L ^ S O C K E T 协议族选项........................................... 336 12.2.1 S O—B R O A D C A S T 广播选项....................................336 12.2.2 S O—D E B U G 调试选项......................................... 337 12.2.3 S O _ D O N T R O U T E 不经过路由选项............................. 337 12.2.4 S O—E R R O R 错误选项......................................... 338 12.2.5 S O _ K E E P A L I V E 保持连接选项................................. 338 12.2.6 S O L I N G E R缓冲区处理方式选项...............................339 • XII • U录 12.2.7 S O _ O O B I N L I N E带外数据处理方式选项.........................342 12.2.8 S O _ R C V B U F 和 S O一S N D B U F 缓冲区大小选项................... 342 12.2.9 S O _ R C V L O W A T 和 S O _ S N D L O W A T 缓冲区下限选项............ 343 12.2.10 S O _ R C V T I M E O 和 S O _ S N D T I M E O 收发超时选项............... 343 12.2.11 S O _ R E U S E R A D D R 地址重用选项............................. 344 12.2.12 S O—E X C L U S I V E A D D R U S E 端 U 独占选项...................... 344 12.2.13 S 0 _ T Y P E套接字类型选项.................................... 345 12.2.14 SO_BSDCOMPAT 与 BSD 銮接字兼容选项............................................345 12.2.15 S O _ B I N D T O D E V I C E套接字网络接口绑定选项................. 345 12.2.16 S O _ P R I O R I T Y套接字优先级选项............................. 346 12.3 I P P R O T O J P 选项...................................................347 12.3.1 IP-HD RT NCL 选项............................................ 347 12.3.2 IP O P T N I O S 选项............................................ 347 12.3.3 IP_TOS 选项................................................. 347 12.3.4 IP_TTL 选项..................................................347 12.4 IPP RO TO_TCP 选项................................................. 348 12.4.1 T C P _ K E E P A L I V E 选项................... ..................... 348 12.4.2 T C P _ M A X R T 选项............................................ 348 12.4.3 T C P—M A X S E G 选项.......................................... 349 12.4.4 T C P _ N O D E L A Y 和 T C P _ C O R K 选项............................ 349 1 2 . 5使用套接字选项.................................................... 351 12.5.1设置和获取缓冲区大小........................................ 351 12.5.2获取套接字类型的例子........................................ 355 12.5.3使用套接字选项的综合例子.................................... 356 12.6 ioctl()函数.......................................................... 361 12.6.1 ioctl()函数的命令选项......................................... 361 12.6.2 ioctl()函数的 IO 请求.......................................... 363 12.6.3 ioctl()函数的文件请求......................................... 365 12.6.4 ioctl()函数的网络接U 请求:.....................................365 12.6.5使用ioctl()函数对A R P 高速缓存操作........................... 372 12.6.6使用ioct〖()函数发送路由表请求.................................374 12.7 fcntl()函数......................................................... 374 12.7.1 fcntl()函数的选项............................................. 375 12.7.2使用fcntl()函数修改套接字非阻塞属性.......................... 375 12.7.3使用fcntlO函数设置信号属主...................................376 12.8 小结...............................................................376 第13章原始套接字......................................................................................................377 13.1 概述...............................................................377 1 3 . 2原始套接字的创建.................................................. 379 • XIII • 目录 13.2.1 S O C K J I A W 选项............................................. 379 13.2.2 IPJHDR 1NCL 套接字选项......................................379 13.2.3 不需要bindO函数............................................. 380 1 3 . 3原始套接字发送报文................................................ 380 13.4 原始套接字接收报文................................................ 380 1 3 . 5原始套接字报文处理时的结构........................................ 381 13.5.1 1 P头部的结构........................................... ..... 381 13.5.2 I C M P 头部结构............................................... 382 13.5.3 U D P 头部结构................................................ 384 13.5.4 T C P 头部结构................................................ 386 13.6 ping 的例子........................................................ 387 13.6.1 协议格式............................................. •••..... 388 13.6.2 校验和函数.................................................. 389 13.6.3 设置I C M P发送报文的头部.................................... 390 13.6.4剥离I C M P接受报文的头部.................................... 391 13.6.5 计算时间差.................................................. 392 13.6.6发送报文.................................................... 393 13.6.7接收报文.................................................... 394 13.6.8主函数过程.................................................. 395 13.6.9 主函数 main()................................................ 397 13.6.10 编译测试................... ................................ 400 1 3 . 7洪水攻击.......................................................... 400 13.8 I C M P洪水攻击..................................................... 401 13.8.1 I C M P洪水攻击的原理.........................................401 13.8.2 I C M P洪水攻击的例子.........................................401 13.9 U D P 洪水攻市......................................................405 13.10 S Y N 洪水攻击.....................................................409 13.10.1 S Y N 洪水攻击的原理.........................................409 13.10.2 S Y N 洪水攻击的例子.........................................409 13.11 小结............................................................. 413 第1 4章服务器模型选择....................................................414 1 4 . 1循环服务器:........................................................ 414 14.1.1 U D P 循环服务器.............................................. 414 14.1.2 T C P循环服务器.............................................. 417 1 4 . 2简单并发服务器.................................................... 420 14.2.1并发服务器的模型............................................ 420 14.2.2 U D P 并发服务器.............................................. 420 14.2.3 T C P并发服务器.............................................. 423 14.3 T C P的高级并发服务器模型.......................................... 426 . XIV • 目录 14.3.1 单客户端单进程,统一 accept()................................. 426 14.3.2 单客户端单线程,统一accept()................................. 429 1 4.3.3单客户端单线程,各线程独自acceptO,使用互斥锁.............. 431 14.4 I O复用循环服务器..................................................435 14.4.1 I O复用循环服务器模型介绍....................................435 14.4.2 I O复用循环服务器模型的例子..................................436 14.5 440 第1 5章IPv6简介.......................... ...............................441 15.1 IPv4 的缺陷........................................................ 441 15.2 IPv6 的特点........................................................ 442 15.3 IPv6 的地址......................:.................................. 443 15.3.1 IPv6的单播地址.............................................. 443 15.3.2可聚集全球单播地址.......................................... 443 15.3.3 本地使用单播地址............................................ 444 15.3.4 兼容性地址.................................................. 445 15.3.5 IPv6 多播地址................................................ 446 15.3.6 IPv6 任播地址................................................ 446 15.3.7主机的多个IPv6地址......................................... 447 15.4 IPv6 的头部........................................................ 447 15.4.1 IPv6 头部格式........................................ ........ 447 15.4.2 与IPv4头部的对比........................................... 448 15.4.3 IPv6 的 T C P 头部............................................. 449 15.4.4 IPv6 的 U D P 头部............................................. 449 15.4.5 IPv6 的 I C M P 头部............................................ 449 15.5 IPv6运行环境...................................................... 451 15.5.1 加载 IPv6 模块............................................... 451 15.5.2查看是否支持IPv6............................................ 452 15.6 IPv6的结构定义.................................................... 453 15.6.1 IPv6的地址族和协议族........................................453 15.6.2套接字地址结构...............................................453 15.6.3 地址兼容考虑................................................ 455 15.6.4 IPv6 通用地址................................................ 455 15.7 IPv6的套接字函数.................................................. 456 15.7.1 socketO 函数.................................................. 456 15.7.2没有发生改变的函数.......................................... 456 15.7.3 发生改变的函数...............................................457 15.8 IPv6的套接字选项.................................................. 457 15.8.1 IPv6的套接字选项............................................ 457 15.8.2 单播跳限 I P V 6 _ U N I C A S T _ H O P S............................... 459 • XV • 目录 15.8.3发送和接收多播包............................................ 459 15.8.4 IPv6中获得时间戳的ioctl命令................................. 460 15.9 IPv6的库函数...................................................... 460 15.9.1地址转换函数的差异.......................................... 460 15.9.2域名解析函数的差异.......................................... 461 15.9.3 测试宏...................................................... 463 15.10 IPv6的编程的一个简单例子......................................... 463 15.10.1 服务器程序................................................. 464 15.10.2 客户端程序................................................. 465 15.10.3 编译调试................................................... 467 15.11 小结............................................................. 467 第3 篇Linux内核网络编程 第16章Linux内核中网络部分结构以及分布...............................................................470 16.1 概述...............................................................470 16.1.1代码目录分布................................................ 470 16.1.2内核中网络部分流程简介...................................... 472 16.1.3系统提供修改网络流程点...................................... 474 16.1.4 sk_buff 结构..................................................475 16.1.5 网络协议数据结构inet_protosw................................. 478 1 6 . 2软中断C P U 报文队列及其处理....................................... 479 16.2.1 Linux内核网络协议层的层间传递手段— 软中断................ 479 1 6 . 2 . 2网络收发处理软中断的实现机制................................ 481 16.3 socket数据如何在内核中接收和发送...................................482 16.3.1 socket()的初始化.............................................. 482 16.3.2 接收网络数据recv()........................................... 482 16.3.3发送网络数据sendO........................................... 483 16.4 小结...............................................................484 第17章neffilter框架内报文处理.................................................................................485 17.1 netfilter............................................................ 485 17.1.1 netfilter 简介..................................................485 17.1.2 netfilter 框架..................................................486 17.1.3 netfilter 检査时的表格.........;................................487 17.1.4 netfilter 的规则................................................487 17.2 iptables 和 netfilter...................................................488 17.2.1 iptables 简介..................................................488 17.2.2 iptables 的表和链............................................. 488 • XVI • 目录 17.2.3 使用iptables设置过滤规则.....................................489 1 7 . 3内核模块编程...................................................... 492 17.3.1 内核 “Hello, World! ”程序................................... 492 17 . 3 . 2内核模块的基本架构.......................................... 494 1 7 . 3 . 3内核模块加载和卸载过程...................................... 496 1 7 . 3 . 4内核模块初始化和清理函数.................................... 497 1 7 . 3 . 5内核模块初始化和淸理过程的容错处理.......................... 497 1 7 . 3 . 6内核模块编译所需的Makefile.................................. 498 17.4 5 个钩子点......................................................... 499 17.4.1 netfilter 的 5 个钩子,点......................................... 499 17.4.2 N F H O O K 'k .................................................500 17.4.3钩了.的处理规则.............................................. 501 1 7 . 5注册/注销钩子...................................................... 502 17.5.1 结构 nf_hook_ops............................................. 502 17.5.2注册钩子.................................................... 503 17.5.3 注销钩子.................................................... 504 17.5.4注册注销函数................................................ 504 1 7 . 6钩子的简单处理例子................................................ 505 17.6.1 功能描述.................................................... 505 17.6.2 需求分析.................................................... 506 17.6.3 ping回显屏蔽实现............................................ 506 17.6.4禁止向目的IP地址发送数据的实现............................. 506 17.6.5 端口关闭实现................................................ 506 17.6.6动态配置实现................................................ 508 17.6.7可加载内核实现代码.......................................... 509 17.6.8应用层测试代码实现.......................................... 516 17.6.9 编泽运行.................................................... 516 17.7 •点多个钩子的优先级...............................................517 1 7 . 8校验和问题........................................................ 518 17.9 小结.... ...........................................................518 第4篇综合案例 第1 8章一个简单W e b 服务器的例子S H T T P D ............................... 522 18.1 S H T T P D的需求分析................................................ 522 18.1.1 S H T T P D启动参数可动态配置的需求............................ 523 18.1.2 S H T T P D的多客户端支持的需求................................ 524 18.1.3 S H T T P D支持方法的需求...................................... 525 18.1.4 S H T T P D支持的H T T P协议版本的需求.......................... 526 • XVII • 0 录 18.1.5 S H T T P D支持头部的需求...................................... 527 18.1.6 S H T T P D 定位 URI 的需求......................................527 18.1.7 S H T T P D 支持 CGI 的需求......................................528 18.1.8 S H T T P D错误代码的需求............... ....................... 529 18.2 S H T T P D的模块分析和设计.......................................... 530 18.2.1 S H T T P D 的主函数............................................ 530 18.2.2 S H T T P D命令行解析的分析设计................................ 531 18.2.3 S H T T P D配置文件解析的分析设计.............................. 532 18.2.4 S H T T P D的多客户端支持的分析设计............................ 534 18.2.5 S H T T P D头部解析的分析设计.................................. 536 18.2.6 S H T T P D 对 URI 的分析设计....................................537 18.2.7 S H T T P D支持方法的分析设计.................................. 537 18.2.8 S H T T P D支持C G I的分析设计................................. 538 18.2.9 S H T T P D错误处理的分析设计................................. <540 18.3 S H T T P D各模块的实现.................................... :......... 542 18.3.1 S H T T P D命令行解析的实现.................................... 543 18.3.2 S H T T P D文件配置解析的实现.................................. 545 18.3.3 S H T T P D的多客户端支持的实现................................ 547 18.3.4 S H T T P D所请求U R I解析的实现............................... 551 18.3.5 S H T T P D方法解析的实现...................................... 552 18.3.6 S H T T P D响应方法的实现...................................... 552 18.3.7 S H T T P D 支持 CGI 的实现......................................556 18.3.8 S H T T P D支持H T T P协议版本的实现............................ 559 18.3.9 S H T T P D内容类型的实现...................................... 559 18.3.10 S H T T P D错误处理的实现..................................... 561 18.3.11 S H T T P D生成目录下文件列表文件的实现.......................563 18.3.12 S H T T P D主函数的实现....................................... 565 18.4 S H T T P D的编译、调试和测试........................................ 566 18.4.1 建立源文件...................................................566 18.4.2 制作 Makefile.................................................566 18.4.3 制作执行文件........................................:....... 567 18.4.4使用不同的浏览器测试服务器程序.............................. 567 18.5 小结...............................................................568 第1 9章一个简单网络协议栈的例子S I P ......................................569 19.1 S I P网络协议找的功能描述........................................... 569 19.1.1 SIP网络协议栈的基本功能描述................................ 570 19.1.2 S I P网络协议栈的分层功能描述................................ 570 19.1.3 S I P网络协议栈的用户接U 功能描述............................ 571 19.2 S I P网络协议找的架构............................................... 571 • XVIII • S 录 19.3 S I P网络协议找的存储区缓存......................................... 572 19.3.1 SIP存储缓冲的结构定义....................................... 573 19.3.2 SIP存储缓冲的处理函数....................................... 577 19.4 S I P网络协议找的网络接U 层......................................... 579 19.4.1 SI P网络接U 层的架构......................................... 579 19.4.2 S I P网络接U 层的数据结构...................................•.••■580 19.4.3 S I P网络接口层的初始化函数...................................581 19.4.4 S I P网络接口层的输入函数.....................................583 19.4.5 S I P网络接口层的输出函数.....................................586 19.5 S I P网络协议栈的A R P 层............................................ 588 19.5.1 SIP地址解析层的架构......................................... 588 19.5.2 SIP地址解析层的数据结构.....................................588 19.5.3 SIP地址解析层的映射表.......................................590 19.5.4 SIP地址解析层的A R P 映射表维护函数......................... 591 19.5.5 SIP地址解析层的A R P 网络报文构建函数.... :..................593 19.5.6 S1P地址解析层的A R P 网络报文收发处理函数................... 595 19.6 S I P网络协议栈的IP层.............................................. 598 19.6.1 S I P网际协议层的架构......................................... 598 19.6.2 S I P网际协议层的数据结构.....................................599 19.6.3 S I P网际协议层的输入函数.....................................601 19.6.4 S I P网际协议层的输出函数.....................................605 19.6.5 S I P网际协议层的分片函数.....................................606 19.6.6 S I P网际协议层的分片组装函数................................ 607 19.7 S I P网络协议栈的I C M P层........................................... 611 19.7.1 SIP控制报文协议的数据结构.................................. 611 19.7.2 SIP控制报文协议的协议支持...................................612 19.7.3 SIP控制报文协议的输入函数.................................. 613 19.7.4 SIP控制报文协议的回显应答函数.............................. 614 19.8 S I P网络协议栈的U D P 层............................................ 615 19.8.1 SIP数据报文层的数据结构.....................................615 19.8.2 SIP数据报文层的控制单元.....................................615 19.8.3 SIP数据报文层的输入函数.....................................617 19.8.4 SIP数据报文层的输出函数.....................................618 19.8.5 SIP数据报文层的建立函数.....................................618 19.8.6 SIP数据报文层的释放函数.....................................619 19.8.7 SIP数据报文层的绑定函数.....................................620 19.8.8 SIP数据报文层的发送数据闲数.................................621 19.8.9 SIP数据报文层的校验和计算...................................622 19.9 S I P网络协议栈的协议无关层......................................... 623 19.9.1 SIP协议无关层的系统架构.....................................623 • XIX • 目录 19.9.2 SIP协议无关层的函数形式.....................................624 19.9.3 S1P协议无关层的接收数据函数................................ 624 19.10 S I P网络协议栈的B S D 接U 层....................................... 625 19.10.1 S IP用户接口层的架构........................................ 625 19.10.2 SIP用户接n 层的套接字建立函数............................. 626 19.10.3 SIP用户接M 层的套接字关闭函数............................. 627 19.10.4 SIP用户接U 层的套接字绑定函数............................. 627 19.10.5 SIP用户接丨」层的套接字连接函数............................. 628 19.10.6 SIP用户接U 层的套接字接收数据函数......................... 628 19.10.7 SIP用户接口层的发送数据函数................................629 19.11 S I P网络协议找的编译.............................................. 630 19.11.1 SI P的文件结构.............................................. 630 19.11.2 SIP 的 Makefile.............................................. 631 19.11.3 SIP的编译运行.............................................. 631 19.12 小结..............................................................631 第2 0章一个简单防火墙的例子S I P F W .......................................633 20.1 S I P F W防火墙的功能描述............................................ 633 20.1.1 S I P F W防火墙对主机进行网络数据过滤的功能描述............... 633 20.1.2 S I P F W防火墙用户设置防火墙规则的功能描述................... 634 20.1.3 S I P F W防火墙配K 文件等附加功能的功能描述................... 634 20.2 SIPFW 需求分析.................................................... 634 20.2.1 S I P F W防火墙条件和动作......................................635 20.2.2 S I P F W防火墙支持过滤的类型和内容........................... 635 20.2.3 S I P F W防火墙过滤的方式和动作............................... 638 20.2.4 S I P F W防火墙的配置文件...................................... 640 20.2.5 S I P F W防火墙命令行配置格式..................................640 20.2.6 S I P F W防火墙的规则文件格式..................................642 20.2.7 S I P F W防火墙的日志文件数据格式............................. 643 20.2.8 S I P F W防火墙构建所采用的技术方案........................... 644 2 0 . 3使用netlink进行用户空间和内核空间数据交S ......................... 645 20.3.1 netlink的用户空间程序设计.................................... 645 20.3.2 netlink 的内核空间 A P I........................................ 648 2 0 . 4使用proc进行内存数据用户空间映射..................................650 20.4.1 proc虚拟文件系统的结构...................................... 650 20.4.2 创建proc虚拟文件........................................... 651 2 0 . 4 . 3删除proc虚拟文件........................................... 652 20.4.4 proc文件的写函数............................................ 652 20.4.5 proc文件的读函数............................................ 653 2 0 . 5内核空间的文件操作函数............................................ 654 • XX • 20.5.1 内核空间的文件结构.......................................... 654 20.5.2 内核空间的文件建立操作...................................... 655 20.5.3 内核空间的文件读写操作...................................... 656 20.5.4 内核空间的文件关闭操作...................................... 657 20.6 S I P F W防火墙的模块分析和设计......................................657 20.6.1 S I P F W防火墙的总体架构...................................... 657 20.6.2 S I P F W防火墙的用户命令解析................................. 660 20.6.3 S I P F W用户空间与内核空间的交互............................. 663 20.6.4 S I P F W防火墙内核链h 的规则处理............................. 666 20.6.5 S I P F W防火墙的P R O C 虑拟文件系统........................... 668 20.6.6 S I P F W防火墙的配置文件和口志文件处理....................... 669 20.6.7 S I P F W防火墙的过滤模块设计................................. 671 20.7 S I P F W防火墙各功能模块的实现......................................673 20.7.〗 S I P F W防火墙的命令解析代码................................. 674 20.7.2 S I P F W防火墙的过滤规则解析模块代码......................... 678 20.7.3 S I P F W防火墙的网络数据拦截模块代码......................... 680 20.7.4 S I P F W防火墙的P R O C 虚拟文件系统........................... 681 20.7.5 S I P F W防火墙对配置文件的解析............................... 683 20.7.6 S I P F W防火墙内核模块初始化和退出........................... 684 2 0 . 7 . 7用户空间处理主函数.......................................... 685 20.8 编译、调试和测试.......................... ....................... 686 2 0 . 8 . 1用户程序和内核程序的Makefile................................ 686 20.8.2 编译及运行.................................................. 687 2 0 . 8 . 3下发过滤规则,测试过滤结果.................................. 688 20.9 小结.............................................................. 690

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧