logo资料库

Windows下TCP_IP协议分析软件的设计开发.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
1 李成大 :Windows 下 TCP/ IP 协议分析软件的设计开发 ·331·    2 2 第 2 期 Windows 下 TCP/ IP 协议分析软件的设计开发 (成都电子机械高等专科学校 计算机系 , 四川 成都 610031) 李成大 摘  要 : 为适应计算机网络教学的需要 ,帮助学生更加直观地理解网络协议的实现原理 ,笔者用 VC 并利 用 VxD 技术开发设计了 TCP/ IP 协议分析软件 。该软件在 Windows 环境下对网络中的数据流进行监听 、截 获 、存储 ,对 TCP/ IP 协议族中各种数据包的包头信息 、数据以及校验和进行分析 ,还原得到协议的各项内 容 。重点介绍该协议分析软件的核心部分 —数据采集子系统和协议分析子系统的设计方案和实现方法 。 关键词 : TCP/ IP ; 协议分析 ; VxD 中图法分类号 : TP273    文献标识码 : A    文章编号 : 1001 3695 (2002) 02 0133 03 Development of a TCP/ IP Protocols Analysis Software in Windows ( Dept . of Computer , Chengdu Electromechanical College , Chengdu Sichuan 610031 , China) LI Cheng da Abstract : In order to meet the demands of the computer networks course teaching and help students understand the principle of TCP/ IP protocols , the author designed the TCP/ IP protocols analysis software using VC programming language. This software monitors ,captures and stores the data stream in networks , and analyzes the datagram headers , data area and checksum of TCP/ IP Protocols. The emphasis of this paper is the introduction of how to implement the data collection subsystem and protocols analysis subsystem , both of which are the core of this software. Key words : TCP/ IP ; Protocols Analysis ; VxD 1  引言 计算机网络的各层及其协议的集合称为网络的体系 结构。网络的体系结构是计算机网络教学中最重要最核 心的内容 。当应用进程的数据在网络中传送时 ,在发送 端首先被分解成一个个的数据包 ,然后将报文逐层下传 , 每经过一层都要加上与该层协议有关的控制信息 。当数 据流沿物理层到达接收端时 ,再将报文逐层上传 ,每一层 根据控制信息进行必要的操作后将控制信息剥去 ,然后 将该层剩下的数据单元上交给更高的一层 ,直至将最终 的数据交给接收端的应用进程 。 Internet 上所使用的 TCP/ IP 协议在计算机网络中占 有特殊重要的地位 ,许多学校的计算机网络教学都以它 为例进行讲解 。为了使学生在枯燥的网络理论学习之余 增加直观的感性认识 ,加深对网络协议原理和内容的理 解 ,笔者开发设计了 Windows 环境下的 TCP/ IP 协议分析 软件 。该软件主要由三部分组成 :用户界面子系统 、数据 采集子系统和协议分析子系统 。用户界面子系统主要实 现 Windows 下美观 、直观的用户操作界面 ,方便教师的教 学和学生的学习 。数据采集子系统和协议分析子系统是 该协议分析软件的核心部分 。下面介绍两个子系统的设 计方案和实现方法 。 2  数据采集子系统 2 1  数据采集原理 TCP/ IP 协议的核心部分是传输层协议 ( TCP 与 UDP) 、网络层协议 ( IP) 和物理层接口层 。这三层通常 在操作系统内核中实现 ,而一般用户不能直接感受到 操作系统的内核 。因此本系统中对网络中原始数据的 采集和协议分析必须通过对网卡进行直接读写来实 现 。 计算机网络虽然是共享通道 ,但它一般只接收数 据包中的目的地址与自己网络地址相符的数据包 ,而 不接收网上传输的发往其它计算机的数据包 。所以本 软件中为了实现既可以采集本机通讯的数据 ,又可以 采集其它主机间的通讯数据 ,应把网卡的工作方式设 置为杂收方式 (Promiscuous Mode) 。 2 2  VxD 技术 收稿日期 : 2001 02 20 由于 Windows 采取的保护措施屏蔽了系统的底层
2 ·431·   3 3 3 3 3 3 3 3 3 3 3 计算机应用研究 2002 年 操作 ,用户不能像在 DOS 下一样直接操纵和使用系统 的硬件资源 ,如内存 、I/ O 端口 、中断和 DMA 等 ,所以 我们 采 用 虚 拟 设 备 驱 动 程 序 VxD ( Virtual Device Drivers) 来实现对网卡的直接读写 。在本系统中我们 利用第三方提供的 VxD 进行二次开发 ,这样既提高了 软件的适应性 (能适应多种型号网卡) ,又缩短了开发 周期 。 2 3  VxD 编程关键技术 (1)  载入 VxD # include < windows. h > HANDLE hVxD ; hVxD = CreateFile (″\ \ \ \ . \ \ VPACKET. VXD″, GENERIC EXISTING, FILE AT READ | GENERIC WRITE , 0 , NULL , OPEN TRIBUTE NORMAL | FILE FLAG OVERLAPPED| FILE FLAG DELETE ON CLOSE , NULL) ; if (hVxD = = INVALID HANDLE VALUE)  return SYSERR ; (2)  释放 VxD CloseHandle (hVxD) ; (3)  绑定 VxD 到网络接口卡 inBuffer) int Bind ( HANDLE hVxD , BYTE { HANDLE hEvent ; DWORD cbRet ; OVERLAPPED ovlp = {0 ,0 ,0 ,0 ,0} ; int result ; int cbIn = 5 ; hEvent = CreateEvent (0 , TRUE , 0 , NULL) ; if ( ! hEvent) return SYSERR ; ovlp . hEvent = hEvent ; / / DeviceIoControl 函数直接发送一个控制码给指定的设备促使相应 的设备去执行指定的操作 result = DeviceIoControl ( hVxD , IOCTL PROTOCOL BIND ,inBuffer , cbIn , inBuffer , cbIn , &cbRet , &ovlp) ; if ( ! result)  GetOverlappedResult (hVxD , &ovlp , &cbRet , TRUE) ; CloseHandle (hEvent) ; return OK; } if ( ! this { ShowMessage (″无法绑定网络设备 (网卡)″) ; return ; } ; 其中 ndis 的含义是设备名 ,一般是 0000 ,0001 等 > Bind (hVxD ,ndis) ) 等 ,在 Win9x 注册表的如下位置 : HKEY LOCAL MACHINE/ System/ CurrentControlSet/ Services/ Class/ Net/ 0000 (4)  读数据包 Buffer , DWORD cbIn) int RcvPacket ( HANDLE hVxD , BYTE {HANDLE hEvent ; DWORD cbRet = 0 ; OVERLAPPED ovlp = {0 ,0 ,0 ,0 ,0} ; int result ; hEvent = CreateEvent (0 , TRUE , 0 , NULL) ; if ( ! hEvent)  return SYSERR ; ovlp . hEvent = hEvent ; result = DeviceIoControl ( hVxD , IOCTL cbIn , Buffer , cbIn , &cbRet , &ovlp) ; if ( ! result)  GetOverlappedResult (hVxD , &ovlp , &cbRet , TRUE) ; PROTOCOL READ ,Buffer , CloseHandle (hEvent) ; return cbRet ; } (5)  送数据包 与 IOCTL PROTOCOL READ 相似 ,此时参数为 IOCTL PROTOCOL WRITE。 3  协议分析子系统 协议分析子系统的任务是根据 TCP/ IP 协议族的内 容 ,对 TCP/ IP 协议族中各种数据包的包头信息 、数据以 及校验和进行分析 ,并实现数据的重组和还原 。限于篇 幅 ,下面仅介绍对 IP 包数据和 TCP 包数据进行分析的方 法 。 3. 1  IP 协议分析 (1)  IP 数据包格式 (如表 1) 表 1  IP 数据报文段的格式 0    4       8    12    16  20   24   28   31 版本 首部长度 服务类型 总长度 标志 寿命 协议 标志 段偏移 首部校验和 源站点 IP 地址 目标站点 IP 地址 长度可变的任选字段 填充 数据 … 其中首部中几个重要字段的意义是 : ● 总长度 占 16Bit ,是指首部和数据之和的长度 ,单位为字节 , 在本文中又称之为流量 。 ● 协议 占 8Bit ,是指此数据报文所携带的运输层数据是使 用何种协议 ,以便目的主机的 IP 层知道应将此数据报文 上交给哪个进程 。常用的协议和相应的协议字段值是 : UDP(17) 、TCP(6) 、ICMP(1) 、GCP(3) 、EGP(8) 、IGP(9) 、SPF (89) 以及 ISO 的 TP4 (29) 。 ● 源站点 IP 地址 占 32Bit ,发送数据报文的主机地址 。 ● 目的站点 IP 地址 占 32Bit ,数据报文发送到的主机地址 。 ● 数据 数据报文所携带的数据信息 。 (2)  描述 IP 包头信息的数据结构 struct ip {  unsigned char   ip   /     /  short   /  nsigned short   /  short   / ip header length ip ip off ; fragment offset field ip identification hl :4 ; / len ; total length / version / v :4 , id ; / /
1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 ·531·    1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 第 2 期 李成大 :Windows 下 TCP/ IP 协议分析软件的设计开发 / / /  # define  IP DF 0x4000   / dont fragment flag  # define  IP MF 0x2000   / more fragments flag  # define  IP OFFMASK 0x1fff   / mask for fragmenting bits  unsigned char   ip   /  unsigned char   ip p :8 ;   / /  unsigned short   ip   / /  unsigned char source[4 ] ,dest[4 ] ;   / /  } ; source and dest address time to live checksum protocol ttl :8 ; sum ; / 3. 2  TCP 协议分析 (1) TCP 数据包格式 TCP 数据报文段的格式如表 2 所示 。 表 2  TCP 数据报文段的格式 0     4           16              31 源端口 目标端口 数据偏移 保留 校验和 发送序号 确认序号 选项和填充 数据 … 窗口 紧急指令 其中首部中重要字段的意义是 : ● 端口 TCP 使用端口 ( Port) 进行寻址 。在主机中往往有多 个进程在运行 ,为区分哪个进程在进行通信 ,就必须在运 输层上设置一些端口 。一个端口是一个 16Bit 的地址 。 对于一些常用的应用层服务 ,都各有一个对应的端口号 , 这些端口号称为熟知端口 ( Wellknown Port) ,数值为 0~ 255 。常用的熟知端口有 : FTP ( 文件传输协议) 21 , Telnet (远程登录) 23 ,SMTP(简单邮件传输协议) 25 ,WWW(World Wide Web) 80 ,POP3 (邮局协议) 110 等 。 (2) 描述 TCP 包头信息的数据结构 struct tcphdr { sport ;   /  unsigned short  th  unsigned short / dport ; th  unsigned int / th seq ;  unsigned int / th ack ;  unsigned char / th off :4 , th x2 :4 ; /  unsigned char th flags ;  # define  TH FIN 0x01  # define  TH SYN 0x02  # define  TH RST 0x04  # define  TH PUSH 0x08  # define  TH ACK 0x10  # define  TH URG 0x20  unsigned short th win ;  unsigned short sum ; th  unsigned short th urp ;  } ; / source port destination port sequence number acknowledgement number data offset (unused) window checksum / urgent pointer / / / / / / / / / / 3. 3  协议分析的实现 if ( FormMain > swaps (pEtherHead IP) / / 从以太网过滤出 IP 数据报文 { > ServType) = = ETHER PROTO > DestPort) ) > port[9 ] ; break ; > port[0 ] ; break ; > port[1 ] ; break ; > port[2 ] ; break ; > Proto = = 6) / / TCP(6) … if (pIPHead { … / / 协议值为 6 ,即是 TCP 的数据报文 … } … } > swaps(pTCPHead 然后过滤出熟知端口的值 : switch (FormMain { case 21 : p = FormMain   / / ftp (send command) case 200 : p = FormMain   / / ftp (send data) case 23 : p = FormMain   / / telnet (远程登录) case 80 : p = FormMain   / / web ( Internet) case 8000 : p = FormMain   / / oicq (8000) case 6666 : p = FormMain   / / icq (6666) case 139 : p = FormMain   / / Neighbor (网上邻居 case 110 : p = FormMain   / / pop3 (收 mail) case 25 : p = FormMain   / / smtp (发 mail) case 443 : p = FormMain   / / pws(Personal Web Server) case 70 : p = FormMain   / / gopher case 1433 : p = FormMain   / / sql server default : p = FormMain   / / 所有的 IP 包 } 远程访问) > port[5 ] ; break ; > port[6 ] ; break ; > port[7 ] ; break ; > port[2 ] ; break ; > port[8 ] ; break ; > port[3 ] ; break ; > port[4 ] ; break ; > port[12 ] ; break ; > port[11 ] ; break ; 4  结束语 从实际使用的效果来看 ,利用该 TCP/ IP 协议分析软 件 ,可以非常直观地观察到网络中传输的原始数据 ,还原 得到协议的各项内容 ,帮助学生深入理解 TCP/ IP 协议的 实现原理 。在《计算机网络》课中 ,笔者使用此软件进行 辅助教学 ,取得了良好效果 ,具有相当的推广价值 。 参考文献 : 计算机网络[M] 北京 :电子工业出版社 ,1999 [1 ] 谢希仁 [2 ] Douglas E Comer ,David L Stevens. Internetworking with TCP/ IP. Vol II : Design , Implementation , and Internals ( Second Edition) [M] [3 ] Dipl. 95[ Z] [4 ] 余建斌 Prentice Ing. Christopher Chlap. Direct Network Access in Windows 1997 黑客的攻击手段及用户对策 [M] 北京 :人民邮 Hall ,Inc ,1994 电出版社 ,1998 [5 ] 蒋东兴 ,等 Windows Sockets 网络程序设计大全 [ M] 北 京 :清华大学出版社 ,1999 作者简介 : 李成大 (1969 为计算机网络 、工业测控系统 。 ) ,男 ,黑龙江省铁力人 ,讲师 ,工学学士 ,研究方向
分享到:
收藏