1、 本科 毕业 设计 (论文 ) (二零 届) 局域网络监听系统的设计 所在学院 专业班级 计算机科学与技术 学生姓名 学号 指导教师 职称 完成日期 年 月 摘要: 阐述了网络监听的概念、原理、实现的方法、如何检测以及防范,并对本设计运用的技术进行了系统的介绍。基于 C+语言的网络监听系统,能 进行数据包的捕获、过滤以及对协议的分析,对网络上主机之间的通信,能给出一个详细的统计信息。经测试,该系统能基本达到预期的目标。由于监听技术功能强大,常被黑客用于盗取网络用户的账号和密码等敏感信息,因此,对信息的传送要时刻注意。 关键字: 网络监听; C+; WinPcap;过滤;协议分析The Desi
2、gn of LAN Network Sniffing System Abstract: This article focuses on the concept, principle and technology of network sniffing, and how to detect and prevent the behavior. The paper systemic introduces the technology used of this design. The LAN network sniffing system uses C+ language to program. It
3、s main functions are intercepting the network data and simple protocol analysis. We can according to custom rules filter some special packets. For the communication between host computers in the Internet, the system can give us a detailed statistical information. As the sniffing technologys function
4、s are powerful, Hackers always use it to steal the Internet users sensitive informations, such as username and password. So, Internet users should maintain the attention to the flow of network packets. Key words: network sniffing; C+; WinPcap; filter; protocol analysi目 录 1 绪论 . 2 1.1 课题的研究背景 . 2 1.1
5、.1 历史背景 . 2 1.1.2 网络监听概述 . 2 1.1.3 网络监听的原理 . 2 1.1.4 网络监听的检测 . 2 1.1.5 网络监听的防范 . 3 1.2 课题研究的目的和意义 . 4 1.3 课题的研究内容 . 4 1.4 论文的组 织结构 . 4 2 基础知识简介 . 5 2.1 C+ . 5 2.2 集成开发环境 VC+6.0 . 5 2.3 Winpcap: windows packet capture . 5 2.3.1 Winpcap的功能 . 5 2.3.2 Winpcap的组成部分 . 6 2.3.3 Winpcap的数据结构 . 6 2.3.4 Winpca
6、p的函数 . 6 2.3.5 实现包捕获 . 7 2.4 TCP/IP协议: Transmission Control Protocol/Internet Protocol . 8 2.4.1 IP: Internet Protocol网际协议 . 8 2.4.2 ARP:地址解析协议 . 10 2.4.3 ICMP: Internet控制报文协议 . 10 2.4.4 UDP:用户数据包协议 . 11 2.4.5 TCP:传输控制协议 . 12 3 系统分析与设计 . 14 3.1 需求分析 . 14 3.2 可行性分析 . 14 3.3 系统结构图 . 14 3.4 信息捕获及过滤 . 1
7、5 3.5 数据包的协议分析过程 . 15 3.6 程序流程图 . 16 4 主要模块程序 . 17 4.1 抓包算法的实现 . 17 4.2 数据包分析算法的实现 . 17 4.3 构造协议的数据类型 . 19 4.4 系统界面设计 . 21 5 系统测 试与评价 . 23 5.1 系统测试 . 23 5.2 评价 . 24 6 总结 . 25 致谢 . 错误 !未定义书签。 参考文献 . 26 1 绪论 1.1 课题的研究背景 1.1.1 历史背景 互联网发展初期,网络监听技术由于操作比较复杂被限制在专业人士的范围内,主要用来监测数据传输,排除网络故障。一般的网民对网络监听技术的了解还不够
8、深入,应用也很薄弱,因此, 互联网上的监听比较少见。 文献 1中对网络监听的历史背景有如下描述:九四年二月间,美国骨干互联网和军方网的众多主机和骨干网络设备被某不知名人士安装了网络监听软件,导致了超过 100000 个有效的用户名和口令被窃取。这可能是互联网上最早期的大规模的网络监听事件,它使得网络监听在安全领域内引起了人们的普遍关注。随着互联网的迅速发展,网络监听从“地下”走向了公开,技术发展日趋成熟,并迅速在大众内普及开来。 1.1.2 网络监听概述 网络监听是 网络管理员用来检查网络状况和分析网络流量的管理手段 2。它可以将主机的工作模式设置成监听模式,用以监视网络的运行状态、测量网络流
9、量以及截获网络上所传输的信息。 网络监听技术是由程序实现的,通过编写程序对数据包进行捕获和分析。 监听程序大致可分为两个部分 :内核程序主要负责捕获网络上传输的数据包并对某些特殊的数据包进行过滤;而用户分析程序主要负责处理用户界面的显示和协议分析。 1.1.3 网络监听的原理 Ethernet协议常被用于局域网中,而广播信道又是共享式 Ethernet所采用的方式 3。当网络中的两台主机互相通信的时候,源主机将写有目的主机地址的数据包以广播的方式 发送出去,即局域网内的所有主机都可以收到这个数据包,但是只有地址与数据包内的地址相匹配的主机才会接收,地址不匹配的主机则会将这个数据包丢弃。 此时,
10、如果网络中有某台主机正好处于混合模式下,那么无论数据包中的 IP 地址是否与自己的 IP 地址匹配,这个数据包都会被该主机接收,其数据内容也会被传递给上层进行后续的处理 4。 1.1.4 网络监听的检测 正在进行网络监听的主机由于不断地捕获网络上传送的数据包,需要消耗大量的存储资源,使得主机的负荷量过大,对外来请求的响应延迟相对的也会变大,所以检测局域网内的主机 是否在进行网络监听的一种方法是根据这些主机对请求的响应时间来判断。 另一方面,主机想要进行网络监听必须有监听软件,而使用了监听软件就会有特定的程序运行,那么就可以靠检测这些监听软件的特定运行程序来进一步检测网络监听的进行。 这两种方法
11、的不确定因素较多:第一种,如驱动没有经过认证、大量的蠕虫病毒在系统内部迅速复制、有些不必要的系统服务自动运行、启动项过多等原因都会造成 CPU资源被大量占用,从而导致系统的响应时间过长,这就会影响网络监听检测的判断;第二种,要同时检查所有主机上正在运行的进程几乎不可能,而且对系统 的依赖性较强,不是所有系统都适用。 往网络上发送大量物理地址不存在的数据包,监听程序接收到这些数据包就会对其进行处理,这个行为将导致进行网络监听的主机的性能下降,然后通过使用特定的方法比较发送数据包前后该主机的性能变化来判断主机是否正在进行网络监听。这种方法虽然准确性较高,但难度较大。 最简单的方法是使用专门的监听检
12、测工具来识别网络接口是否处于监听状态。 1.1.5 网络监听的防范 网络分段指将网络划分为不同的网段,它能防止非法用户访问敏感的网络资源,是防范网络监听的一项重要措施 5。 VLAN(虚拟局 域网 Virtual Local Area Network,以下简称 VLAN)技术将以太网基于广播的通信方式转变为点到点通信,确保信息从源端发送到目的端的过程中不会到达其它地方,这种通信方式可以防止大部分基于网络监听的入侵手段 6。 指定静态 ARP(地址解析协议 Address Resolution Protocol,以下简称 ARP)可以用来防止基于 ARP原理的交换式网络中的监听行为,进行这步操作
13、之后, ARP缓存不会因为收到 ARP响应包而更新, ARP欺骗也就丧失了作用 7。 预防网络监听最好的方法就是对要传 输的数据进行加密。由于多数信息都是以明文的形式进行传输,很容易被监听,用户口令也会被窃取。数据加密技术使得传输的信息被隐藏,明文以密文的形式发送,只有按特定方式解密才能读取包含的信息,这样,即使发送的数据被监听,其中包含的信息也不会被读取,很好地保护了用户信息的安全。 1.2 课题研究的目的和意义 当今社会,提起网络监听,人们最先想到的就是黑客。作为一项危险而强大的技术,网络监听被当成入侵网络的“钥匙”。黑客在网络中进行监听时,只是对网络中传输的数据包进行检测和分析,读取其中
14、包含的内容,进而分析所处的网络 状态和整体布局,这个行为是安静的,不会作出响应,所以很难检测出网络中是否有监听行为,这使得网络监听更加危险。为了防范黑客的攻击,提高网络的安全性,我们必须了解网络监听的原理,找出有效的防范措施。而网络监听技术使用得当也会给用户带来极大的益处。在监听网络状况的同时,也在检查网络有无故障,是否受到攻击,是否感染病毒等,能自动帮助网络管理员维护网络。 1.3 课题的研究内容 在该系统中,有以下期望实现的功能 : ( 1) 捕获网络上各主机之间传输的原始数据包。 (2) 按照自定义规则过滤掉某些特殊的数据包。 (3) 收集网络通信过程中的统计信息。 本课题研究的是网络监
15、听系统,因此该系统必须能进行数据包的捕获、过滤以及对协议的分析。对网络上主机之间的通信,能给出一个详细的、逐包的统计信息。为保证设置的缓冲区不被无效数据溢出,必须在捕获数据包时进行过滤,可以设置过滤规则,例如根据使用的协议过滤数据包。能对捕获的数据包进行分析,提取其中包含的信息。 1.4 论文的组织结构 本论文共由 六 部分内容组成:第一部分是绪论,主要介绍了本次课题的研究背景,包括本系统发展的历史背景,叙述了网络监听的概念、原理、如何检测以及如何防范,同 时阐述了研究本课题的目的和意义,简单介绍了研究的内容。第二部分是基础知识简介,首先对本系统的开发语言 C+以及 C+的集成开发环境 VC+
16、6.0进行了简单的说明,然后介绍了本系统运用的核心技术,又对开发技术相关的 TCP/IP协议做了详细的整理。第三部分内容是系统分析与设计,包括需求分析、可行性分析以及设计本系统时的一些必要的图,如系统结构图,流程图等。第四部分是主模块程序,主要针对设计的程序进行说明。第五部分是系统测试与评价,检查开发的系统是否能按预期的要求正常运行。最后一部分是对本次课题的总结。 2 基础知识简介 2.1 C+ C 语言是在吸收了其他语言的一些优点后逐步发展为实用性很强的语言,而 C+语言又是在 C语言的基础上逐步发展和完善起来的,是一种静态数据类型检查的,支持多种编程范式的面向过程和面向对象都使用的混合型语
17、言 5,与 C语言相比, C+语言显得更为强大。 C+语言具有以下主要特点: ( 1)兼容性 C+能完全兼容 C 语言,同时也具有 C语言的一系列特点,如语句简捷紧凑,使用起来灵活方便,包含范围广泛的运算符,有丰富的数据结构,可以直接访问机器的物理地址,语法限制比较小,程序设计的自由度 大。很多 C+程序代码都是在 C语言的基础上作了很小的修改或者干脆不修改就可以在 C+语言的集成开发环境下成功运行。 ( 2)面向对象 C+作为一种面向对象的程序设计语言,它使程序的各个模块间更具独立性,程序的可读性更好,代码结构更加合理,设计和编制大型软件更为方便 5。 ( 3)扩充性 用 C+设计的程序有比
18、较强的扩充性,易于修改。 2.2 集成开发环境 VC+6.0 VC+6.0是 C+语言的开发平台,它是基于 Windows系统平台、可视化的集成开发环境。其中加入了功能涉及到整个 Windows操作系统 的 MFC 类库, MFC中含有 API函数和 Windows控件,不仅给用户提供了 Windows图形环境下应用程序的框架,还提供了创建应用程序的组件,可以节省开发人员大量的编程时间。此外, VC+6.0还提供了大量的代码,在用户编程时指导他们实现某些技术和功能,所以,使用包含 MFC类库且高度可视化的应用程序开发工具 VC+6.0,可以使应用程序的开发变得更为简单。 2.3 Winpcap
19、: windows packet capture 2.3.1 Winpcap 的功能 数据包处理驱动 WinPcap是由微软资助的一 个项目,是 Libpacp在 Windows下的扩展,是 WINDOWS平台下的一个免费、公共的网络访问系统,它为 WIN32应用程序提供了访问网络底层的能力。它能实现以下几项功能: ( 1) 捕获网络上各主机之间传输的原始数据包。 (2) 按照自定义规则过滤掉某些特殊的数据包。 (3) 在网络上发送原始的数据包。 (4) 收集网络通信过程中的统计信息。 2.3.2 Winpcap 的组成部分 Winpcap 是由伯克利分组捕获库派生而来的分组捕获库,是 BPF
20、 模型和 Lipcap 函数库在 windows 平台下网络数据包捕获 和网络状态分析的一种体系结构,该体系结构由三部分组成:一个核心的包过滤驱动程序,即 NPF,是一个虚拟设备驱动程序文件,它可以过滤数据包,并将其原封不动地传给用户态模块;一个底层的动态连接库 Packet.dll,它为win32 平台提供了一个公共的接口;一个高层的不依赖于系统的函数库 wpcap.dll,它提供了更加高层、抽象的函数。 2.3.3 Winpcap 的数据结构 文献 6中描述的 Winpcap的数据结构种类主要有: typedef struct_ADAPTER ADAPTER :描述一个网卡。 typede
21、f struct _PACKET PACKET:描述一组网络数据报的结构。 typedef struct NetType NetType :描述网络类型的数据结构。 typedef struct npf_if_addr npf_if_addr:描述一个网卡的 IP 地址。 struct bpf_hdr:数据报的头部。 struct bpf_stat:当前捕获的数据报的统计信息。 2.3.4 Winpcap 的函数 文献 6中描述的 Winpcap的函数主要有: int pcap_findalldevs(pcap_if_t*,char*):用来获取当前设备的网卡列表。 Void pcap_fre
22、ealldevs(pcap_if_t *):此函数用于释放空间。 Pcap_t *pcap_open_live(const char * device,int snaplen,int promise,int to_ms,char ebuf *):用来获取一个包捕获的描述符。 int pcap_loop(pcap_t *p,int cnt,pcap_handler callback,u_char *user):用来 捕获数据包,不会响应 pcap_open_live()中设置的超时时刻 6。 int pcap_dispatch(pcap_t *p,int cnt,pcap_handler,u_c
23、har *user):捕获数据包,可以不被阻塞。 int pcap_next_ex(pcap_t *p,struct pcap_pkthdr *pkt_header,u_char*pkt_data):捕获数据包,有一个网卡描述符和两个指针,这两个指针会被初始化并返回给用户。 int pcap_compile(pcap_t *p,struct bpf_program *fp,char *str,int optimize,bpf_u_int32 netmask):编译一个过滤设备,使用高层的 boolean 型变量和字串产生一系列二进制编码,此编码能够被底层驱动所解释 。 int pcap_set
24、filter(pcap_t *p,struct bpf_program *fp):联系一个过滤器,该过滤器能够在内核驱动上过滤,此时,网络上的所有数据包全部都会经过该过滤器,然后被拷贝到相应的应用程序中 。 int pcap_sendpacket(pcap_t *p,u_char *buf,int size):手工发送一个数据包。 2.3.5 实现包捕获 文献 7中描述了基于 Winpcap实现网络数据包捕获的流程,如图 2-1所示: ( 1)获取当前设备的网卡列表,从中选择一块将要监听的网卡并将其工作模式设为混合模式。 ( 2)向回调函数发送监听命令,使其从网络设备驱动程序处收集数据包并传给过滤程序。 ( 3)分组驱动程序将过滤程序收到的数据包传递给每一个分组过滤程序。 ( 4)设置过滤规则对接收到的所有数据包进行过滤,只将符合要求的数据包传递给相应 的应用程序。 ( 5)应用程序将符合要求的数据包提交给核心缓冲区,等待系统缓冲区满后,监听程序直接从用户缓冲区中读取捕获的数据包。 ( 6)关闭网卡。