- 作者:zhaozj
- 发表时间:2020-12-23 11:01
- 来源:未知
初探数据包分析程序设计 Author :maigan From : 第八军团-信息安全小组( http://www.cnhacking.com/ http://www.juntuan.org/) Mail : maigan@maigan.com Warning: 转载本文请注明作者及出处 整天在网上转,也看到许多不错的文章,但我发现大多文章要么只停留在理论上,要么就是太高深。对问题详细分析介绍的很少。今天,我就想以数据包分析程序为主题和大家讨论一下网络编程的的相关问题,我也是新手,有不到之处,还望大家不吝指正。 通过对数据包的分析,我们可以判断通信双方的操作系统、网络信息流量、经过的路由、数据包的大小,以及数据包的内容等等。对于喜欢网络安全的人来说,掌握这方面的知识是相当重要的。现在的网络通信中,大部分数据都没有加密,我们可以轻易地从数据包中提取账号、密码之类我们关心的数据.大家在看本文时如有困难,可先读一读计算机网络及C程序设计还有协议分析方面的书。下面我将分TCP/IP族协议结构、程序部分函数及数据结构说明、案例程序剖析三个部分与大家共同学习数据包分析程序的设计方法。 一、TCP/IP族协议结构 在说TCP/IP之前,先让我们来认识一下以太网,因为我们现在接触最多的就是以太网,并且研究数据包又是离不开以太网的帧的。在以太网中,数据是以被称为帧的数据结构本为单位进行交换的。以太网中常用的协议是CSMA/CD(carrier sense multiple access with collision detection)即载波监听多点接入/碰撞检测,在这里,我们关注的是帧的格式。常用的以太网帧的格式有两种标准,一种是DIX Ethernet V2标准,另一种是IEEE的802.3标准。现在最常用的MAC帧是V2格式,这也是我们所要研究的格式,至于802.3帧我们不再讨论。以太网V2帧的格式如下: (插入8字节)目的地址(6字节)->源地址(6字节)->类型(2字节)->数据(46-1500)->FCS(4字节) 以太网的地址由48位的二进制来表示,也就是我们常说的MAC地址及硬件地址。在MAC帧前还有8字节的前同步码和帧的开始定界符,之后才是地址等报头信息。接收端和发送端的地址之后是2字节的类型字段,存放帧中传送数据的上层协议类型,RFC1700号文档规定了这些,如下: ETHER TYPES(十六进制) PROTOCOlS 800 IP 806 ARP 8035 Revese ARP 809B Apple Talk 8137/8138 Novel 814c SNMP 帧的数据部分长度为46-1500字节,当小于46时,会在后面加入一个整数字节的填充字段。FCS(Frame Check Sequence)在以太网常用循环冗佘校检(CRC:cyclic redandancy check)。 IP协议为网络层协议,网络层的数据结构体被称为IP数据报。IP地址及域名这两个概念我们就不说了,下面我们来看一看IP数据报的结构: 成员名 字节数 说明 version 1/2 IP的版本,现在为IPV4 IHL(报送长度) 1/2 最常用为20,取5-15之前的值,最大60字节 Type Of Service 1 优先和可靠性服务要求的数值 Total Lenth 2 IP数据报的全长 Identification 2 识别IP数据报的编号 Flags 3/8 1位为0表示有碎块,2位为0表示是最后的碎块,为1表示接收中。 Fragment Offset 13/8 分片在原分组中的位置 TTL 1 数据报寿命,建议值为32秒 Protocol 1 上层协议 Headerchecksum 2 报头检验码 Source Address 4 发送端IP地址 Destination Address 4 接收端IP地址 Options And Padding 4 选项及填充位 其中协议字段的值对我们分析数据包是很重要的,下面列出来给大家看看: 值 协议 意义 1 ICMP Internet Control Message Protocol 6 TCP Tranfer Control Protocol 8 EGP Exterior Gateway Protocol 9 IGP Interior Gateway Protocol 17 UDP User Datagram Protocol 下面这些协议的值在后面的程序中我们可以见到,请大家留心记一下。接着我们介绍地址解析协议(ARP/RARP): 成员名 字节数 说明 Hardware address 2 硬件类型,以太网为1 Protocol address 2 上层协议类型,IP为800 Byte length of each hardware 1 查询物理地址的字节长度,以太网为6 Byte length of each protocol address 1 查询上层协议的字节长度,IPv4时为4 Opcode 2 1为ARP请求,2为响应;3为RARP请求,4为响应 Hardware address of sender of this packet 6 发送端硬件地址 protocol address of sender of this packet 4 发送端IP地址 Hardware address of target of this packet 6 查询对象硬件地址 Protocol address of target of this packet 4 查询对象IP地址 ARP/RARP协议用来查询IP对应的硬件地址或反过来查询IP地址,这在我们分析数据包时也会见到。下面介绍ICMP协议。我们常用的PING命令就是用的这个协议,这个协议比较简单,由类型(1字节)、代码(1字节)、检验和(2字节)、还有四个字节的与类型相关的可变部分及数据构成。 数据包在运输层还有两个重要的协议,即TCP/UDP,TCP/UDP中使用端口的概念,以区别计算机上不同的程序。下面我们先来看看TCP数据报的首部构成: 成员名 字节数 说明 Source Port 2 发送端端口号 Destination Port 2 接收端端口号 Sequence NO 4 本报文段所发送的第一个字节的序号 ACk Number 4 期望收到的下一个报文段的序号 DAta Offset 1/2 首部的长度 Reserved 3/4 保留今后用 Contol Bits 3/4 控制位 Window 2 滑动窗口的大小 Checksum 2 检验和 Urgent Pointer 2 紧急指针 Options And Padding 4 可选,真充项 Tcp被使用在跨越路由器进行网络服务的网络应用程序中,如WWW、电子邮件、新闻、FTP等。UDP则是在IP的基础上加入了端口的概念,其结构很简单,只有八个字节首部如下: 源端口(2字节)->目的端口(2字节)->长度(2字节)->检验和(2字节) 二、程序部分函数及数据结构说明 在此部分我们将介绍后面程序中用到的部分函数及数据结构。在程序中我们使用了PCAP程序库,大家可以从