版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于 Netfilter 的高效端口扫描技术林俊杰, 庄卫华,林巧河海大学信息及工程学院,南京 (210098E-mail :摘 要:本文在 linux 操作系统上分别实现了基于 Netfilter 的数据包捕获和链路层捕获这两 种不同捕获技术的端口扫描器, 并对它们进行比较分析, 实验证明当需要扫描的端口数量很 庞大时,前者在速率和可靠性方面要优于后者。关键词:Linux ; Netfilter ;数据包捕获;端口扫描; Proc 文件系统1. 引言端口扫描的原理是向目标主机的目标端口提出建立一个连接的请求, 如果对方有此项服 务,就会应答,从而获得目标主机的开放资源信息。利用这个原理,可以
2、对所有熟知的端口 或自己选定的某个范围内的熟知端口建立连接, 并记录下目标主机的应答, 通过查看记录便 可以知道目标主机上安装了哪些服务, 从而获得很多关于目标主机的各种很有参考价值的信 息。端口扫描器的用途广泛,它可以用来帮助用户搜索网络资源,例如搜索网络中的匿名 FTP 资源时,第一步就是利用端口扫描器扫描出指定网络中的开放 ftp 端口,然后再同这些 开放的 ftp 端口建立连接,进行匿名用户验证。它也可以帮助网络管理员发现系统漏洞,关 掉一些不用的端口。一般端口扫描器的实现方法是发送探测目的端口是否开放的请求数据包, 然后在链路层 捕获目标主机发送过来的响应数据包。 当需要扫描的目的端
3、口数量很庞大时, 那么需要发送 很多的探测数据包, 并且被扫描的目的主机也会响应很多的数据包, 而且现在一般的端口扫 描器为了加快扫描是通过多线程并发扫描来实现, 这样便会使得链路层的捕获缓冲区溢出而 使得一些关键的响应数据包丢失, 从而降低扫描的可靠性。 为了克服这些缺陷, 可以利用基 于 Netfilter 的数据包捕获技术在网络层捕获符合要求的数据包并直接在内核进行处理而不 用将所要捕获的数据包交付给应用层处理,使得捕获的效率和扫描的可靠性大大提高。2. 端口扫描简介2.1 TCP连接的过程TCP 协议是面向连接的数据传输协议,因而在两台主机间开始 TCP 通信时,首先需要 创建连接。
4、创建连接的过程就是所谓 “ 三向握手 ” 的过程 1。 图 1是正常的 TCP 连接过程, 为 了便于对端口扫描的理解, 以下介绍当端口分别在打开和关闭状态下, 对不同类型的请求数 据包是如何响应的。处于 LISTEN 状态的监听端口:(1当收到包含 RST 标志的 TCP 数据包,不应答直 接丢弃。(2收到包含 ACK 标志的 TCP 数据包,发送设置 RST 标志的响应数据包。(3 收到只设置 SYN 标志的 TCP 数据包,开始进行正常的连接。 (4收到其它类型的数据包, 不同的操作系统应答的方式不同,根据 RFC793规定是直接丢弃不应答 2,不过有的操作系 统例如 windows 系
5、统会发送设置 RST 和 ACK 标志的响应数据包。处于 CLOSE 状态的关闭端口 2:(1当收到包含 RST 标志的 TCP 数据包,不应答直 接丢弃。(2收到其它类型的数据包,发送设置 RST 标志的响应数据包。 图 1TCP 建立连接过程2.2 端口扫描的分类(1 connect 扫描同被扫描的目标端口建立正常的 TCP 连接,如图 1中所示。通过系统调用函数 connect 来实现,若能够顺利的实现 “ 三向握手 ” 代表目标端口开放,否则关闭。(2半开放的 TCP SYN扫描技术从上面的扫描过程中可以看到,其实发送 SYN 后,看对方的回复便可以知道端口的开 闭状态,不必建立正常的
6、 TCP 连接。所以可以利用 TCP 三向握手协议的前两个握手来判断 目标端口是否打开。由于这种扫描方法的 TCP 全连接没有完全建立,故这种技术被称为半 打开扫描。(3隐蔽式扫描技术通过 2.1中关于打开、关闭端口在收到不同类型请求数据包的响应方式中可以知道,当 向目标端口发送 “ 其它类型 ” 的请求数据包,如果是打开的端口会丢掉,否则返回 RST 类型 的数据包。这种扫描包括 FIN 扫描、 Xmas 扫描(PSH+URG+FIN、 NULL (无标志扫描 等。 为了防止探测的请求数据包被目标主机的防火墙过滤掉, 提高扫描的可靠性, 经常要结 合隐蔽式扫描。(4 TCP ACK扫描发送只
7、有 ACK 标志的 TCP 数据包,不管是打开还是关闭的端口,都返回设置 RST 标 志位的数据包。这种扫描方法可用于判断目标主机是否开机。3. 基于 Netfilter 的数据包捕获技术在端口扫描过程中首先向目的端口发送各种类型的探测数据包, 然后捕获接收方发送过 来的响应数据包, 本文利用 Netfilter 框架来实现对数据包的捕获。 这种捕获技术是基于网络 层的, 同以往基于链路层的捕获技术相比, 其捕获的效率要高, 因为链路层的捕获会捕获流 经该网络接口上的所有数据,而网络层的捕获只会捕获流经对应 Netfilter 钩子节点上的 ip 数据包。3.1 Netfilter框架Netf
8、ilter 是 Linux 内核实现数据包过滤、处理、 NAT 等功能的结构框架 3,它为 IPv4网络协议定义了 5个钩子函数 (Hooks,内核模块可以对一个或多个这样的钩子函数进行注 册挂接,使这些钩子函数在数据包流过协议栈时被调用,从而可以修改这些数据包,并向 Netfilter 返回如下值:NF_ACCEPT,继续正常传输数据包; NF_DROP,丢弃该数据包,不 再传输; NF_STOLEN,模块接管该数据包,不再继续传输该数据包; NF_REPEAT,再次调用该钩子函数; NF_QUEUE,对该数据包进行排队,这些排队的数据包被传递给用户空 间进程进行异步处理,用户进程能检查、修
9、改数据包。 Netfilter 的结构框架如图 2所示。 从 图 2中 可 以 看 出 IPv4的 5个 钩 子 函 数 分 别 是 :NF_IP_PREROUTING, NF_IP_LOCALIN, NF_IP_FORWARD,NF_IP_POSTROUTING, NF_IP_LOCALOUT。数据包 从左边进入系统,进行 IP 校验以后,数据包经过第一个钩子函数 NF_IP_PREROUTING 进 行处理; 然后就进入路由代码, 它决定该数据包是需要转发还是发给本机; 若该数据包是发 给本机的, 则该数据经过钩子函数 NF_IP_LOCALIN处理后, 传递给上层协议; 若该数据包 应该
10、被转发,则它被 NF_IP_FORWARD处理;经过转发的数据包经过最后一个钩子函数 NF_IP_POSTROUTING处理以后,再传输到网络上。本地产生的数据经过钩子函数 NF_IP_LOCALOUT处理后,可以进行路由选择处理,然后经过 NF_IP_POSTROUTING处 理后,发送到网络上。 图 2 Netfilter结构框架示意图3.2 基于 Netfilter 的数据包捕获技术的实现基于 Netfilter 的数据包捕获是在网络层进行包捕获,进入协议栈的数据包在流经 Netfilter 的各个钩子节点时, 会依次执行注册在该钩子节点上的钩子函数。 所以在 LOCALIN 钩子节点上
11、注册一个用于进行数据包捕获处理的钩子函数, 在该钩子函数实现内部会判断流 经的数据包是否为所要捕获的数据包,从而实现了在内核层进行数据包的捕获处理 45。 /*在 netfilter LOCALIN链上注册一个钩子函数 packet_capture, 优先级 NF_IP_PRI_FIRST使得钩子函数 packet_capture在 LOCALIN 链上最先被执行 */struct nf_hook_ops pkt_capture= NULL, NULL , packet_capture, PF_INET, NF_IP_LOCAL_IN, NF_IP_PRI_FIRST ;ret = nf_re
12、gister_hook(&pkt_capture;/*注册钩子函数 */static unsigned intpacket_capture(unsigned int hook, struct sk_buff *pskb, const struct net_device *in,const struct net_device *out, int (*okfn(struct sk_buff *struct iphdr *ip; /*ip头部指针 */void *protohdr;/*传输层头部指针 */ip = (*pskb->nh.iph; /*ip头部指针 */protohdr
13、= (u_int32_t *ip + ip->ihl; /*protohdr为传输层头部指针 */switch(ip->protocol/*对不同传输层协议的数据包,检验是否为所要捕获的数据包 */case IPPROTO_TCP:/*根据应用层传递过来的所要捕获数据包的特征信息进行判 断,对于 TCP 协议,特征信息主要有确认序列号、目的端口、 tcp 标志 */case IPPROTO_ICMP:/*对于 icmp 协议的特征信息,会按照 icmp 协议类型来选择 其对应的特征信息, 例如回显请求就是标识符、 序列号, 目的主机不可达错误就是 协议号、标识号、生存时间 */de
14、fault:return(NF_ACCEPT; /*如果传输层协议不是 TCP 、 ICMP 协议,不捕获 */ 3.3 内核空间同用户空间进程之间的特征信息传递内核捕获模块需要依据所要捕获数据包的特征信息来选择所要捕获的响应数据包, 内核 模块是通过同用户态的进程建立通信来获取这些特征信息。 内核态同用户态进程的通信方式 有很多种,本文选择 /proc虚拟文件系统作为内核模块同用户态进程之间交互的方式。 /proc文件系统同其它的文件系统不同,它是存在于内存中而不是硬盘上, /proc文件系统被用于 收集关于系统和运行中的内核的信息, 例如有关内核的状态、 计算机的属性、 正在运行进程 的状
15、态、系统资源的使用情况等。尽管 /proc是虚拟的,但是用户态的进程仍然可以使用标 准的文件 I/O接口来访问它从而获得各种各样的系统信息。 内核模块经常为内核变量创建对 应的 /proc文件,这样用户态的进程就可以通过访问该 /proc文件来实现同内核模块的通信。 本文就是通过为每种协议数据报的每个特征信息单独创建一个 /proc文件,这样用户态的进 程通过向这些 /proc文件写入特征信息来将特征信息载入内核模块。本文首先创建目录 /proc/net/capture/、 /proc/net/capture/tcp/、 /proc/net/capture/icmp,然后在目录 tcp 、 i
16、cmp 下创 建对应协议各种特征信息的 proc 文件,每个 proc 文件在内核模块中都对应一个用于记录其 特征信息的内核变量。除了创建这些用于记录特征信息的 proc 文件,在 /proc/net/capture目 录下还创建了一个 result 文件,这个文件的作用是当内核捕获到所要捕获的数据包时,为了 提高捕获效率, 并没有将这些数据包传递给用户空间的进程进行处理, 而是直接在内核中进 行处理,然后将处理的结果信息记录在 result 文件中,这样用户空间的进程只需要通过读取 result 文件来获得处理结果信息,而不用读取整个数据包,提高读取速率。4. 性能比较与分析本文通过实验来对
17、基于 Netfilter 捕获技术和链路层捕获技术(通过 Libpcap 来进行链路 层的数据包捕获的端口扫描器进行比较,得到的实验结果数据如表 1所示:测试环境:cpu Celeron 1.7GHz 内存 256MB 操作系统 Redhat 9.0表 1 两种扫描器的比较扫描方法 扫描目标 扫描时间 扫描到的端口 个数链路层捕获, 多线程扫描 55 目标端口 1500027min15sec 58655 目标端口 108055 目标端 口
18、15000 22min18sec 690基于 Netfilter捕获,多线程扫描目标端口 1080通过表 1可以看到, 当扫描的目标端口数量不多时, 两种扫描技术的扫描时间和扫描到 的端口个数相同。 但是当扫描的目的端口数量很庞大时, 基于 Netfilter 的端口扫描器在速率 和可靠性方面都有较大的提高。 因为链路层捕获时, 会捕获很多无关的数据包, 由于用户空 间的捕获进程来不及对所捕获到的数据包进行处理, 致使内核的捕获缓冲区溢出, 从而导致 目标主机发送过来的响应数据包未被捕获降低了扫描的可靠性。 另一方面基于 Netfilter 的扫 描器在内核中捕获并处理响应数据包, 捕获效率大
19、大提高, 所以在扫描的速率方面也优于前 者。5. 结束语一般的端口扫描器都是通过在链路层对数据包进行捕获来实现扫描的, 这种扫描器当需 要对大范围的目标端口进行扫描时, 其捕获器的捕获效率便成为影响扫描速率和可靠性的主 要因素。 如何提高报文捕获效率成为当前学者研究的热门课题, 目前很多的优化改进措施都 是针对具体的应用需求, 还没有一个统一有效的优化策略。 本文将基于 Netfilter 的数据包捕 获技术引入到端口扫描中去, 使得扫描的速率和可靠性大大提高, 从而帮助普通用户和网络 管理员能够更快更有效地解决实际问题。参考文献1 W.Richard Stevens. TCP/IP详解卷 1
20、:协议M . 范建华等译.机械工业出版社, 2000.4.2 /rfc/rfc0793.txt?number=7933 乐德广,郭东辉,吴伯僖.基于 Netfilter 的 NAT 技术及其应用 J.计算机工程, 2004(2:35-37. 4 iptables-1.2.7源代码 .5 linux-2.4.20-8内核中关于 Netfilter 源代码 .The Efficient Port Scanning Technology Based on Netfilter Lin Junjie, Zhuang Weihua, Lin QiaoThe College of Computer an
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上海复旦大学附属肿瘤医院杨慧娟教授课题组招聘研究助理1人建设考试参考试题及答案解析
- 2026中铝数智物联科技有限公司面向中铝集团内部招聘13人建设笔试模拟试题及答案解析
- 2026辽宁铁岭市市本级3家单位补充招聘公益性岗位工作人员3人建设考试参考题库及答案解析
- 2026江西九江德安县社会招聘城市社区工作者17人建设笔试模拟试题及答案解析
- 2026沈阳地铁集团有限公司所属公司招聘84人建设笔试模拟试题及答案解析
- 2026中日友好医院招聘9人(第一批)建设考试参考题库及答案解析
- 2026年江铜铜箔科技股份有限公司第一批次春季校园招聘89人建设笔试备考试题及答案解析
- 2026江苏泰州市中医院招聘13人建设考试备考题库及答案解析
- 2026浙江温州外国语高级中学(温州中学国际部)招聘经济教师1人建设笔试备考试题及答案解析
- 2026广东佛山市南方医科大学第七附属医院事业单位高层次人才招聘4人(第一批)建设考试参考题库及答案解析
- 高效的表达与沟通技巧
- 2023年电子科技大学辅导员招聘考试真题
- 人工智能训练师(5级)培训考试复习题库-上(单选题汇总)
- 过程能力测量报告 Cg Cgk
- 2023年沈阳市苏家屯区中心医院高校医学专业毕业生招聘考试历年高频考点试题含答案附详解
- von frey丝K值表完整版
- 暂估价说明概述
- GB/T 15171-1994软包装件密封性能试验方法
- 诊断学查体相关实验
- 《高等教育法规概论》练习题及答案(合集)
- 毕业设计论文-四足机器狗(吐血发布)
评论
0/150
提交评论