协议分析器程序.ppt
计算机网络高级软件编程技术,1,吴功宜 董大凡王 珺 刘 乾,“十一五”国家重点图书 计算机科学与技术学科前沿丛书计算机科学与技术学科研究生系列教材(中文版)计算机网络 高级软件编程技术,计算机网络高级软件编程技术,2,第16章协议分析器程序,计算机网络高级软件编程技术,3,概述,协议分析器可以有效完成对网络上传输数据包的捕获,从而收集与分析网络信息,是网络流量监控和故障检测所必不可少的工具之一,对网络管理与网络安全具有重要的意义,计算机网络高级软件编程技术,4,编程训练目的编程训练要求相关知识介绍程序设计分析扩展与提高,提纲,计算机网络高级软件编程技术,5,编程训练目的,编写一个简化的协议分析器,了解数据通过网络传输时的封装与解析过程,加深理解TCP/IP协议栈的工作原理和网络应用软件开发能力。掌握根据软件功能结构进行模块化设计的方法掌握Winpcap编程与抓包方法;了解使用原始套接字(raw socket)实现数据包捕获的方式;使用Winpcap库的流量统计和向网络中发包等高级特性。,计算机网络高级软件编程技术,6,编程训练目的编程训练要求相关知识介绍程序设计分析扩展与提高,提纲,计算机网络高级软件编程技术,7,编程训练要求,编程实现一个协议分析器。该协议分析器将包含以下几部分功能:数据采集实时捕捉Ethernet网络数据包;解析Ethernet网数据帧头部的全部信息;实现基于MAC地址和帧头部类型字段的数据包过滤;解析IP数据包的头部信息;实现基于IP地址和IP头协议的数据过滤;,计算机网络高级软件编程技术,8,编程训练要求(续),对ICMP报文,要求至少解析ICMP回显请求、回显应答、超时及目的不可达四种类型的报文;解析传输层TCP、UDP协议头部信息;实现基于端口的数据包过滤;实现应用层HTTP协议头部分析。,计算机网络高级软件编程技术,9,编程训练目的编程训练要求相关知识介绍程序设计分析扩展与提高,提纲,计算机网络高级软件编程技术,10,协议分析器基本原理,Ethernet是目前应用最广泛的计算机连网方式,它基于总线结构,物理层采用广播方式。当一台主机向另一台主机发送数据时,网络上所有的主机都能接收到该帧,但只有目的地址正确的主机会接受数据,而其他主机应将其丢弃。协议分析器就是一种能将本地网卡状态设置成“混杂”模式并接收网络上所有数据帧的软件。,计算机网络高级软件编程技术,11,网络分层体系结构及常用协议所在层次,计算机网络高级软件编程技术,12,以太网数据的封装与解析过程,计算机网络高级软件编程技术,13,以太网帧结构,前导码与帧前定界符:前导码为56bit的1010101010,帧前定界符为10101011目的地址和源地址:MAC地址为48bit长度/类型:长度(小于0800H),类型(大于等于0800H,如IP为0800H、ARP为0806H)数据字段:用于携带上层传下来的数据。帧校验字段:32位的CRC前导码、帧前定界符和帧校验和三个字段属于物理层内容,在数据链路层不会得到这些字段,因此在MAC层只需解析目的地址、源地址、长度/类型和数据字段。,计算机网络高级软件编程技术,14,ARP报文结构,计算机网络高级软件编程技术,15,IP报文结构,计算机网络高级软件编程技术,16,ICMP报文结构,计算机网络高级软件编程技术,17,TCP报文结构,计算机网络高级软件编程技术,18,UDP报文结构,计算机网络高级软件编程技术,19,HTTP报文结构,HTTP请求消息的一般格式,计算机网络高级软件编程技术,20,HTTP报文结构(续),HTTP响应消息的一般格式,计算机网络高级软件编程技术,21,编程训练目的编程训练要求相关知识介绍程序设计分析扩展与提高,提纲,计算机网络高级软件编程技术,22,协议分析器总体结构,计算机网络高级软件编程技术,23,网络数据包的捕获,Windows平台下可以通过WinPcap获取网络数据包。WinPcap(详细内容参见 http:/)。是一个开源的、运行于Win32平台的体系结构包括内核级别的、低层次的包过滤动态连接库packet.dll和高级别系统无关函数库wpcap.dll安装WinPcap驱动程序和DLL程序(可以从http:/网站下载)。安装开发人员使用的开发工具包(developers pack)包括:库文件、包含文件、简单的示例程序代码和帮助文件。,计算机网络高级软件编程技术,24,数据包捕获流程图,计算机网络高级软件编程技术,25,协议解析流程,计算机网络高级软件编程技术,26,需注意的问题:字节顺序,网络序主机序u_short ntohs(u_short netshort)u_long ntohl(u_long netlong)主机序网络序u_short htons(u_short hostshort)u_long htonl(u_long hostlong),计算机网络高级软件编程技术,27,编程训练目的编程训练要求相关知识介绍程序设计分析扩展与提高,提纲,计算机网络高级软件编程技术,28,向网络中发送自定义数据包,Winpcap提供了一个简单而快捷的方式发送一个原始数据包。,/*发送自定义数据包。*pPacketBuf中是数据缓冲区指针,*iSize是数据包大小*/pcap_sendpacket(hAdapterHandle,pPacketBuf,iSize);,计算机网络高级软件编程技术,29,使用Winpcap统计功能的基本流程,