网络抓包与协议分析软件的设计与开发_毕业设计论文(编辑修改稿)内容摘要:

接口的用户级的抓包库 ,它为底层网络监听提供了可移植框架。 它的应用包括网络统计集合 ,安全监听 ,网络调试等。 WinPcap WinPcap[5]是 LibPcap 的 Windows 版本 ,它是一个基于 Win32 的捕获数据包和网络分析的体系结构 ,它包括一个内核级的包过滤器 ,一个底层的动态链接库( ) ,一个高层并且与系统无关的库( ,基于 版本)。 WinPcap 是集成于 Windows95,98,ME,NT,2020和 XP操作系统的设备驱动程序 ,它可以从网卡捕获或者发送原始数据 ,同时能够过滤并且仓储数据包。 开发 WinPcap 这个项目的目的在于为Win32 应用程序提供访问网络底层的能力。 它提供以下四项功能: 1) 捕获原始数据报 ,包括共享网络上各主机发送 /接收的以及相互之间交换的数据 6 报; 2) 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉; 3) 在网络上发送原始的数据报; 4) 收集网络通信过程中的统计信息。 JPcap JPcap[6]是一个能够捕获,发送网络数据包的 Java 类库包。 这个包用到了 LibPcap和原始套接字 API。 目前 JPcap 在 FreeBSD , Linux RedHat , Solaris 和 Microsoft Windows 2020/XP 系统上已经做过测试,并且支持 Ether, IPv4, IPv6, ARP/RARP,TCP, UDP, ICMPv4 协议。 JPcap 是一个 Java 类集合,它为网络数据包的捕获提供接口和系统支持。 最初版本是 2020 年 6 月发布的 版,此后几经修改,到现在最新的 版。 WinPcap 研究 WinPcap 是 windows 平台下一个免费、公共的网络访问系统,是为 Linux 下的Libpcap 移植到 Windows 平台下实现数据包捕获而设计的函数库,在设计 WinPcap 时参照了 Libpcap,使用方法也与 Libpcap 相似,基于 Libpcap 的程序可以很容易的移植到Windows 平台下。 这个数据包捕获架构是由加州大学和 Lawrence Berkeley 实验室及其投稿者联合开发的,他们在 1999 年 3月 31日推出了 版,提供了用户级 BPF 过滤;1999 年 8 月 21 日推出了 版,将 BPF 过滤增加到内核中并增加了内核缓存; 2020年 3月 15 日推出了 版,该版对 libpcap 进行了升级,并可支持更多的网络类型; 2020 年 1月 30日推出了 2. 2版; 2020 年 3月 28 日推出了 2. 3 版; 2020 年 1 月lO 日推出了 3. O 版,增加了 NPF 设备驱动的一些新的特性及优化方案,在 中增加了一些函数等等功能。 WinPcap 的最新版本是。 WinPcap 的官方主页是,可以在其主页上下载这个软件及其源代码,更重要 的是,网站上还有很多开发文档,对于利用 WinPcap 作为工具开发网络安全软件的编程人员有很大帮助。 WinPcap 提供了四项功能: 1)捕获原始数据报,包括共享网络上各主机发送 /接收的以及相互之间交换的数据报; 7 2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉; 3)在网络上发送原始的数据报; 4)收集网络通信过程中的统计信息。 WinPcap 的主要功能在于独立于主机协议(如 TCP/IP)而发送和接收原始数据包,也就是说, WinPcap 不能阻塞,过滤或控制其他应用程序数据包的发收,它仅 仅只是监听共享网络上传送的数据包。 因此,它不能用于 QoS 调度程序或个人防火墙。 目前,WinPcap 开发的主要对象是 windows NT/2020/XP,这主要是因为在使用 WinPcap 的用户中只有一小部分是仅使用 Windows 95/98/Me,并且微软也已经放弃了对 win9x 的开发。 有个软件叫 sniffer pro 可以作网管软件用,有很多功能,可监视网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问 IP 以及它们之间的数据流通情况,可以抓包,可对过滤器进行设置,以便只抓取想要的包,比如 POP3 包, smtp 包, ftp包等,并可从中找到邮箱用户名和密码,还有 ftp 用户名和密码。 它还可以在使用交换机的网络上监听,不过要在交换机上装它的一个软件。 还有一个简单的监听软件叫Passwordsniffer,可截获邮箱用户名和密码,还有 ftp 用户名和密码,它只能用在 HUB网络上。 著名软件 tcpdump 及 ids snort 都是基于 libpcap 编写的,此外 Nmap 扫描器也是基于 libpcap 来捕获目标主机返回的数据包的。 WinPcap 提供给用户两个不同级别的编程接口:一个基于 libpcap 的 ,另一 个是较底层的。 对于一般的要与 unix 平台上 libpcap 兼容的开发来说,使用 是当然的选择。 WinPcap 内部结构 Winpcap 是针对 Win32 平台上的抓包和网络分析的一个架构,它由内核级的网络组包过滤器( Netgroup Packet Filter, NPF)、用户级的动态链接库 和 等 3个模块组成 [7]。 1) 网络组包过滤器。 它是运行于操作系统内核中的驱动程序,它直接与网卡驱动程序进行交互,获取在网络上传输的原始数据包。 NPF与操作系统有关, WinPcap 开发组针对不同的 Windows 操作系统提供了不同版本的 NPF。 在 Win95/98/ME 系统中,它以 VXD 文件形式存在,在 Windows NT 和 Windows 2020 系统中,它以 SYS 文件形式存在。 该模块提供了抓取数据包以及发送数据包的基本功能,此外还提供了一些高级功 8 能,如数据包过滤系统和检测引擎。 2) 低级动态链接库。 用于在 Win32平台上为数据包驱动程序提供一个公共的接口。 不同的 Windows 版本在用户态和内核态之间提供互不相同的接口,而 可以屏蔽这些接口区别,提供一个与系统无关的 API。 基于 开发的数据包截获程序可以运行于不同的 Win32 平台而不必重新进行编译。 可以执行如获取适配器名称、动态驱动器加载以及获得主机掩码及以太网冲突次数等低级操作。 3)高级动态链接库。 模块与 Unix 系统下的 BSD 截获架构提供的 Libpcap库完全兼容。 它提供了一组功能强大且跨平台的函数,利用这些函数可以不去关心适配器和操作系统的类型。 含有诸如产生过滤器、定义用户级缓冲以及包注入等高级功能。 编程人员既可以使用包含在 中的低级函数直接进入内核级调用,也可以使用由 提供的高级函数调用,这样功能更强,使用也更为方便。 的函数调用会自动调用 中的低级函数,并且可能被转换成若干个NPF 系统调用。 WinPcap 的主要函数库 Winpcap 函数库主要有如下函数 : 1) int pcap_findalldevs (pcap_if_t **,char *) 用来获得网卡的列表 2) void pcap_freealldevs (pcap_if_t *) 与 int pcap_findalldevs (pcap_if_t **,char *)配套使用 ,当不需要网卡列表时 ,用此函数释放空间 3) pcap_t *pcap_open_live(const char *, int, int, int, char *) 用来得到一个包抓取得描述符 4) Int pcap_loop(pcap_t *, int, pcap_handler, u_char *) 捕获数据包 ,不会响应 pcap_open_live()中设置的超时时间 5) int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *) 捕获数据包。 可以不被阻塞 6) int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **) 捕获数据包 9 7) int pcap_pile(pcap_t *, struct bpf_program *, const char *, int, bpf_u_int32) 编译一个过滤设备,与 pcap _ setfilter () 配合使用 8) int pcap_setfilter(pcap_t *, struct bpf_program *) 用来联系一个在内核驱动上过滤的过滤器 ,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中 10 3 系统设计 捕获数据的分析与还原 对捕获数据的解析,其主要依据是网络协议中定义的各种包的类型和包的格式,下面依次对这些数据的格式与协议进行介绍与分析。 标准的数据帧分析与还原 根据 TCP/IP 协议,机器接收到一个以太网数据包时,数据从协议栈中由底向上升,同时去掉各层协议加上的报文 首部,每层协议都要检查报文首部的协议表示,以确定数据的上层协议。 根据以太网数据链路层的帧格式,网络适配器的驱动程序会自动计算校验和,并取走帧中的前同步码和校验和字段,因此 WinPcap 接收的数据包仅仅是其中的帧头和载荷部分,即捕获到的是帧结构中的“目标 MAC 地址”、“源 MAC 地址”、“帧类型”、“帧中数据”这四部分。 在这种情况下,要实现对数据帧的还原,只需要将捕获的数据帧的前 12 个字节分别转换为十六进制数据,就可以清楚地看到 MAC 地址,并通过对比本机的 MAC地址,还可以初步判断出该数据帧是本机发送的或是接 收到的。 IP 报文的分析与还原 首先来看下 IP数据报格式 [8],如图 31所示 : 图 31 IP数据报格式 版本: 4 位,标识 IP版本号。 目前有 IPv IPv6。 我们目前所用的 IP 协议基本都是 IPv4 版本。 11 首部长度: 4 位,度指的是首部占 32bit 字的数目,包括任何选项。 由图 31可知首部所占字节数为( 4+4+8+16+16+3+13+8+8+16+32+32+0)= 160bit,正好是 32bit 的5 倍,所以首部长度最小为 5。 如果选项字段有其它数据,则这个值会大于 5。 由上面也可知 IP首部最小 长度为 20字节,最大长度为( 2的 4次方 1) *32/8= 60字节。 服务类型: 8 位,其中: 优先权: 3位,设置了数据包的重要性,取值越大数据越重要,取值范围为: 0(正常) 7(网络控制)。 TOS: 4 位,分别表示最小延时、最大吞吐量、最高可靠性、最小费用。 如果 4位TOS 子字段均为 0,那么就意味着是一般服务。 未使用: 1位,必须置 0。 总长度: 16 位,总长度指首部和数据之和的长度,以字节为单位。 利用首部长度字段和总长度字段,就可以知道 I P 数据报中数据内容的起始位置和长度。 由于该字段长 16比特,所以 IP数据报 最长可达 65535 字节。 标识: 16位,唯一地标识主机发送的每一份数据报。 通常每发送一份报文它的值就会加 1。 IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。 但这个“标识”并不是序号,因为 IP 是无连接服务,数据报不存在按序接收的问题。 当数据报由于长度超过网络的 MTU 而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。 相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 在分片和重组技术中将会用到。 标志: 3 位,但目前只有 2位有意义。 标志字 段中的最低位记为 MF( More Fragment)。 MF=1 即表示后面“还有分片”的数据报; MF=0 表示这已是若干数据报片中的最后一个。 标志字段中间的一位记为 DF( Don39。 t Fragment),意思是“不能分片”。 只有当 DF=0时才允许分片,具体定义如下: 1) 保留位: 1位 ; 2) DF 字段: 1位,取值: 0(允许数据报分段)、 1(数据报不能分段); 3) MF 字段: 1位,取值: 0(数据包后面没有包,该包为最后的包)、 1(数据包后面有更多的包)。 片偏移: 13 位。 片偏移指出:较长的分组在分片后,某片在原分组中的相对位置 ,。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。