协议分析器程序

上传人:cn****1 文档编号:561465607 上传时间:2023-12-26 格式:DOCX 页数:16 大小:207.21KB
返回 下载 相关 举报
协议分析器程序_第1页
第1页 / 共16页
协议分析器程序_第2页
第2页 / 共16页
协议分析器程序_第3页
第3页 / 共16页
协议分析器程序_第4页
第4页 / 共16页
协议分析器程序_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《协议分析器程序》由会员分享,可在线阅读,更多相关《协议分析器程序(16页珍藏版)》请在金锄头文库上搜索。

1、协议分析器程序编程训练目的协议分析器可以有效完成对网络上传输数据包的捕获,从而收集与分析网络信息,是网 络流量监控和故障检测所必不可少的工具之一,对网络管理与网络安全具有重要的意义。协议分析器的正当用途是分析网络流量,以便找出网络运行中潜在的问题。例如,当网 络中的某一网段运行情况不良,网络时常出现阻塞,报文发送缓慢,此时我们就可以使用协 议分析器来作出精确的问题判断。另一方面协议分析器也被称作网络嗅探器(sniffer),它 同时有威胁网络安全的一面,如利用网络嗅探器窃取他人帐号、密码等敏感信息,因此也要 注意防范其可能造成的危害。本次编程训练的目的就是通过编程实现一个简单的协议分析器。通过

2、该课题的训练,读 者对 TCP/IP 协议原理的理解、对网络管理与网络安全工具的设计与实现技术的提高会有很 大地帮助,同时也可对网络嗅探器的实现机理有深入地了解。编程训练要求1. 本次编程训练要求实现一个协议分析器。该协议分析器将包含以下几部分功能:1)数据采集实时捕捉 Ethernet 网数据包;说明:数据采集功能需提供两种模式直接模式和混杂模式,直接模式只用于捕获目 的地为本机的数据;混杂模式则可捕获流经Ethernet网络的所有数据包。2)解析 Ethernet 网数据帧头部的全部信息;3)实现基于 MAC 地址和帧头部类型字段的数据包过滤;说明:基于MAC地址的数据过滤主要满足用户获取

3、和分析特定MAC地址的主机通信 数据的要求。例如,如果用户只对网内MAC地址为01-25-d3-a4-88-98主机的通信信息感兴 趣,那么通过这个功能,用户就可以将与这个主机无关的数据剔除,使数据的捕获更加有针 对性,方便数据分析的进行。对帧头部类型字段的数据过滤主要用于区分载荷是IP报文还 是 ARP 或 RARP 报文。4)解析IP数据包的头部信息;说明:需要解析的字段主要包括:版本,头部长度,服务类型,总长,TTL,上层协议, 源IP,目的IP等。5)实现基于IP地址和IP头协议的数据过滤;说明:这个过滤主要是基于IP地址(源地址或者目的地址),以及IP头部的上层协议 字段(比如要求只

4、捕获ICMP数据包等);6)对ICMP报文要求至少解析ICMP回显请求、回显应答、超时及目的不可达四种消 息报文;7)解析传输层TCP、UDP协议头部信息;8)实现基于端口的数据包过滤;9)实现应用层HTTP协议头部分析。上述9个方面的功能组装起来就是一个简单的网络协议分析器,它包含了数据采集、协 议分析和数据过滤等功能。2. 熟悉 Winpcap 编程。程序要求在 Windows 环境下运行,使用 Winpcap 完成抓包过 程。相关知识1. 协议分析器基本原理协议分析器是一种常用的数据收集方法,简单的说,它是在广播式网络环境下利用计算 机网络接口截获目的地为其他计算机的数据报文的一种工具。

5、Ethernet 是目前应用最广泛的计算机连网方式,它是基于总线结构,物理层是采用广播 方式的。当一台主机向另一台主机发送数据时,发送主机会将包含目的主机正确地址的数据 帧发送到总线上,因此同一链路上所有活跃主机的网卡都能接收到该帧。正常情况下,网卡 收到传输来的数据帧后,会先检查帧头的目的地址字段,如果该地址不是本机的MAC地址, 则丢弃不管,因此只有具有该地址的主机会接受这个数据帧。但是,如果某个程序能够修改 网卡的接收模式,使其成为“混杂(promiscuous)”模式,即一台主机可以接收网络上所有 的数据帧而不理会帧头的目的地址,利用这一点,就可以实现协议分析器。因此协议分析器 就是一

6、种能将本地网卡状态设成“混杂”模式并接收网络上所有数据帧的软件。协议分析器工作在网络环境中的底层,拦截所有正在网络上传送的数据,并且通过相应 的解析处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。2. TCP/IP 分层体系结构计算机网络实际上是按照不同的通信功能划分的层次结构系统,每一层的功能都由特定 的协议来完成。TCP/IP协议族是当前最流行也是最成功的是一套的网络协议栈,其结构自底 向上分为4层,分别为主机-网络层、互联网层、传输层和应用层。主机至网络层在TCP/IP 中并没有做具体的规定。通常情况下我们选择Ethernet网作为底层网络环境,并使用常用的5 层网络

7、体系结构即物理层、数据链路层、网络层、传输层和应用层作为分层标准,如图6-1 所示。在TCP/IP协议族的众多协议中,每种协议处理相应层所要求的网络功能,在图6-1中 也给出了比较常见的网络协议及其所属的层次位置。图 16-1 TCP/IP 常见协议及所在层次位置3. 数据的封装与解析当应用程序通过IP网络传送数据时,数据被送入TCP/IP协议栈中,然后从上至下逐一 通过每一层,直到最后被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些 首部信息(有时还要增加尾部信息),这个过程被称作封装。通过以太网传输的比特流称作 帧(frame)。在传输的另一端,当目的主机收到一个以太网数据帧时

8、,数据就开始从协议栈 由底向上逐层解析,去掉各层协议所加上的报文头部。每层协议均要检查报文头部中的协议 标识字段,以确定要接收数据的上层协议,最终从报文中解析出应用层数据后交给应用程序 处理。该封装与解析过程如图16-2 所示。本次要编写的协议分析器,就是从网络中捕获数据包并对其进行解析的过程。因此,我 们需要了解每层协议所规定的报文格式,然后由底向上逐层对数据包进行解码,最后将分析 的结果显示出来。编程训练设计分析1. 协议分析器总体结构协议分析器的整体结构按功能应分为三个部分,自底向上分别是数据捕获模块、协议解 析模块和用户显示模块,如图16-3 所示。其中用户显示模块由于灵活度比较大,既

9、可以采 用控制台方式输出,也可以使用 Windows 图形窗口界面的各种视图(如树形视图、列表视 图、编辑视图或普通视图等)对解码结果进行显示,因此这里不做特殊要求,编程时由读者 任意选择一种方式即可。后面仅对数据捕获模块和协议解析模块的关键代码进行分析。2. 数据捕获模块数据捕获模块的主要功能是进行数据包的采集,这是整个系统的基础和数据来源。程序 使用Winpcap来捕获网络中原始数据包。Winpcap是Win32环境下数据包捕获的开放代码 函数库,它可以完成以下主要功能:a)捕获网络中的原始数据包。b)使用用户自定义规则 对数据包进行过滤。c)发送用户自己构造的数据包到网络中。d)统计网络

10、流量。具体使用 方法参见其官方说明文档:http:/www.winpcap.org/docs/docs 40/index.htm。使用Winpcap捕获数据包的算法一般分为以下几步:(1) 获取并列出当前网络设备列表。(2) 由用户选择并打开指定网卡。(3) 根据过滤规则设置过滤器。(4) 捕获数据包并进行解析处理。参考流程图如图16-4所示。图 16-4 数据包捕获流程图 下面给出各步骤的核心代码。需要注意的是,为了使程序流程更加清晰,下面的代码片 段中去除了错误检查等保护性代码,读者在自己编程时应注意添加。1.获取并列出当前网络设备列表。pcap_if_t* pAdaptersList =

11、 NULL;网卡列表指针char errbufPCAP_ERRBUF_SIZE;错误消息缓冲区pcap_findalldevs(&pAdaptersList, errbuf); 获取本地网络设备列表 /*列出找到的网络设备*/int iAdapterCount = 0;for (pcap_if_t* pAdapter= pAdaptersList; pAdapter!=NULL; pAdapter=pAdapter-next)iAdapterCount+;if (pAdapter-description)如果有描述则输出详细信息/*输出当前序号和描述信息(pAdapter-descriptio

12、n)*/ else否则输出网卡名/*输出当前序号和网卡名(pAdapter-name)*/2. 由用户选择并打开指定网卡。/*有些主机中有多个网卡,所以要列出所有网卡,让用户选择合适的网卡来捕获数据包。用户选择的网卡序号放在iAdapterSelected变量中*/跳到指定网卡pAdapter = pAdaptersList;for (int i=0; inext;打开网卡,之前要先设置bPromiscMode,为1表示混杂模式,为0表示直接模式网络设备名称允许截获数据包的最大长度混杂模式标志读取数据超时时间错误信息缓冲区pcap_t* hAdapterHandle; /网卡句柄 hAdapt

13、erHandle = pcap_openive(pAdapter-name, 65535, bPromiscMode, 300, errbuf);3. 根据过滤规则设置过滤器。/ pAdapter指向要设置的网卡,首先获取子网掩码u_int uNetMask;if (pAdapter-addresses)uNetMask = (sockaddr_in*)(pAdapter-addresses-netmask)-sin_addr.s_addr;elseuNetMask = 0xffffff; 忽略子网掩码char szFilterCode1024;/*根据规则构造过滤表达式,并存放在szFilt

14、erCode缓冲区中*/编译过滤器bpf_program fpCode;if (pcap_compile(hAdapterHandle, & fpCode, szFilterCode, TRUE, uNetMask) 0)TRACE (Unable to compile the filter. Error Msg %s, pcap_geterr(hAdapterHandle); return;设置过滤器pcap_setfilter(hAdapterHandle, & fpCode);程序要求可以实现4种类型的过滤:1)基于协议的过滤(包括ARP、IP、ICMP、TCP 和UDP协议);2)基于

15、MAC地址的过滤;3)基于IP地址的过滤;4)基于端口的过滤。 Winpcap的强大功能之一就是它的过滤器引擎,该功能用到了 pcap_compile()和pcap_setfilter() 两个函数。其中前者将一个包含高级布尔表达式的过滤规则字符串转化为底层的字节代码, 这种字节代码可以由 Winpcap 包驱动程序的过滤器引擎来解释并执行;后一个函数用于将 一个编译好的过滤器规则同一个捕获会话联系起来,即该函数执行之后,过滤规则就将应用 于指定的包捕获过程。由此可以看出,设置过滤器最主要的工作在于如何根据规则构造过滤 表达式。下面就对过滤表达式语法进行一下简单介绍。其中关键字或限定符用黑体字表示, 应当代换的信息用斜体字表示。1)表达式支持逻辑操作符,可使用关键字and, or, not对子表达式进行组合,同时支 持使用小括号。2) 基于协议的过滤要使用协议限定符,协议限定符可以为 ip, arp, rarp, tcp 和 udp 等。3) 基于MAC地址的过滤要使用限定符ether (代表Ethernet网地址)。当该MAC地 址仅作为源地址时过滤表达式为ether sr

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号