logo资料库

基于Jpcap的IP数据包分析.pdf

第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
资料共35页,剩余部分请下载后查看
基于 Jpcap 的 TCP/IP 数据包分析 2001 赵新辉 目 录 第一章 以太网的结构和 TCP/IP 1.1 以太网的结构 1.1.1 基于网络架构的以太网 1.1.2 以太网的数据交换 1.1.3 以太网帧的结构 1.2 IP 数据报的构成 1.2.1 IP 地址 1.2.2 路由 1.2.3 IP 数据报的构成 1.2.4 其他报文结构 1.3 TCP/UDP 1.3.1 TCP/UDP 的作用 1.3.2 TCP 和 UDP 报文的结构 第二章 Jpcap 类库 2.1 Jpcap 的使用 2.1.1 Jpcap 的运行环境的安装 2.1.2 Jpcap 的开发环境的安装 2.2 Jpcap 介绍 2.2.1 Packet 基类及其子类 2.2.2 Jpcap 的主要功能 第三章 数据包监听程序的设计 3.1 数据包监听原理 3.2 以太网帧的解析 3.2.1 获取 MAC 地址 3.2.2 数据包类型的判断
3.3 IP 数据报的监听 3.3.1 IP 数据报的解析 3.3.2 ARP 和 ICMP 数据报解析 3.4 TCP 和 UDP 监听 3.4.1 TCP 数据报的解析 3.4.2 UDP 数据报的解析 第四章 数据包分析 4.1 流量分析 4.1.1 数据包大小的表示 4.1.2 数据包流量观测 4.2 数据包分类分析 4.2.1 数据包过滤 4.2.2 利用数据包分析解决网络问题 第五章 数据包发送 5.1 构造发送 IP 数据包 5.1.1 IP 数据包构造与发送 5.1.2 发送结果分析 5.2 构造发送 TCP 数据包 5.2.1 TCP 数据包构造与发送 5.2.2 发送结果分析 1
第一章 太网的结构和 TCP/IP 1.1 以太网的结构 以太网是当今现有局域网采用的最通用的通信协议标准。该标准定义了在局域网 (LAN)中采用的电缆类型和信号处理方法。以太网在互联设备之间以 10~100Mbps 的速率 传送信息包,双绞线电缆 10 Base T 以太网由于其低成本、高可靠性以及 10Mbps 的速率而 成为应用最为广泛的以太网技术。许多制造商提供的产品都能采用通用的软件协议进行通 信,开放性最好。以太网,属网络低层协议,通常在 OSI(open system interconnect reference model)模型的物理层和数据链路层操作。它是总线型协议中最常见的,数据速率为 10Mbps (兆比特/秒)的同轴电缆系统。 1.1.1 基于网络架构的以太网 在计算机网络构成中,一般都实行使用协议进行层与层之间得通信。通常的 OSI 中, 把协议等级分为七层。第一层是物理层,处理关于硬件上的网络协议。第七层为应用层,处 理关于应用程序的协议。第二层到第六层按照其间的顺序被依次设置。 高 层 低 层 层 第七层 第六层 第五层 第四层 第三层 名 称 规 定 的 内 容 应用层 关于邮件、新闻等应用程序的协议 表示层 数据语法协议 会话层 基于网络的管理对话协议 传输层 补充第三层的功能,可靠地在两台计算机间传输数据 网络层 从网络上多台计算机中选择作为通讯对象地计算机 第二层 数据链路层 在两台计算机上进行一对一数据通信 第一层 物理层 电气信号、连接器规格等关于硬件地协议 OSI 参考模型 以太网是 20 世纪 70 年代,施乐(Xerox)公司地 Palo Alto 研究所设计的,其后在 80 年代由施乐、英特尔、DEC(后被康柏收购)三家公司总结了面向局域网(LAN)的协议 2
集合。而以太网的规格是由美国电气和电子工程师协会(Institute of Electrical and Electronics Engineers)中专门讨论规格的 802 委员会,从 1980 年开始标准化讨论的。并把 IEEE802.3 作为标准规格,其后 ISO(International Standard Organization)把它作为 ISO802.3 标准。 旧的以太网设备是用同轴电缆作为传送媒体的。使用同轴电缆的以太网,设备之间的连 接不需要网络集线器,但必须在同轴电缆上讲设备连接起来,是同轴电缆成为多台设备间共 享信号的总线(bus),这种网络连接形式被称为总线型。现在,广为使用的传送媒体为双绞 线。通常使用的是被称为第五类的双绞线,拥有 100Mbit/s 的通信速度。在用双绞线连接时 要使用被称为网络集线器的设备。它是为实现多台计算机的连接,把多根双绞线相互连接起 来的设备。在使用网络集线器的网络重,计算机以网络集线器为中心呈放射状连接,这样的 网络被称为星型网络。 由于以太网中集线器的转发功能,也就使得进行数据包监听可以在局域网内进行。本文 中的数据包监听程序都是在局域网内进行的。当然,数据包监听也可以在网关等数据包的进 出口进行。 1.1.2 以太网的数据交换 在以太网中,数据是以被称为帧的数据结构体为单位进行交换的。通常在计算机网络上 交换的数据结构体的单位是数据包,而在以太网中把使用的数据包称为帧。数据包包含着发 送给对方所必需信息的报头部分和记录着传送给接收端信息内容的报文部分组成的。报头包 含接收端的地址、发送端的地址、数据错误检查和改正所必需的错误检验和修正码。数据包 被传送到网络上,通过网络中继装置传送到接收端。 帧是被称为带碰撞检测的载波侦听多址访问(CSMA/CD: Carrier Sense Multiple Access with Collision Detection)发送的。在 CSMA/CD 技术中,如果网络上没有数据,则任何时候 都可以将数据传送出去。因此,传送数据的网络设备,首先要确认网络上是否有数据在传送。 如果没有数据则可以将数据发送到网络上。如果网络被使用,那就要等到网络空闲后发送。 上面的工作相当于 CSMA/CD 的 CSMA 部分。在这种方法中,同时发送数据的网络设备会 同时认为网络是空闲的,这样就会产生发送冲突。因此,在 CSMA/CD 技术中会经常一边检 测数据冲突,一边发送数据。如果检测出冲突,为强调冲突的发生,要等待发送出 32 位数 据所必需的时间之后,在等待一个随机决定的时间,而后重新发送。这样同时开始发送的两 台网络设备中,随机数小的网络设备先进行发送,随机数大的网络设备要等到网络空闲下来 才能发送。这种等到时间被称为补偿时间。 网络拥挤和多次反复发生冲突,就可能造成数据无法发送。因此,为有效利用网络资源, 3
在网络空闲和拥挤时,对等待的最大值进行调整。空闲时即冲突次数少的情况下,把等待时 间的最大值缩小;拥挤和冲突频繁发生时,把等待时间的最大值扩大。等待时间的最大值可 以用下面的公式表示: T=Ts×2k 式中 Ts 为发送 512 位数据所必需的时间(被称为 Slot 时间),k 为冲突次数和数字 10 中最 小的数字。 这样,在 CSMA/CD 技术中,网络空间的情况下,任何时候都可以将数据发送出去,万 一发生冲突造成发送失败时,可以重新发送帧。所以 CSMA/CD 在网络比较空闲的情况下是 一种高效的通信协议。 但是在网络拥挤的情况下恰好相反。CSMA/CD 发生冲突时,在等待和再次发送等方面 花费过多的时间,会造成网络反复发送无用的数据,网络设备和传送线路等网络资源被白白 占用,结果导致通信效率降低。 在冲突频繁发生的以太网上,CSMA/CD 的通信效率非常低,因为无法预测什么时候会 发生冲突,因此不能保证对方在一定的限制时间内能接收到数据。这样,在进行声音和图像 等对时间依赖性很强的多媒体数据的实时通信的情况下,存在着致命缺陷。所以采用 CSMA/CD 的以太网不能进行面向多媒体数据的通信。 帧在网络上传输,由网卡接收。一般而言,网卡有几种接收数据帧的状态,如 unicast, broadcast,multicast,promiscuous 等,unicast 是指网卡在工作时接收目的地址是本机硬件地 址的数据帧。Broadcast 是指接收所有类型为广播报文的数据帧。Multicast 是指接收特定的 组播报文。Promiscuous 则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检 查,全部接收的工作模式。 当局域网内的主机都通过 HUB 等方式连接时,一般都称为共享式的连接,这种共享式 的连接有一个很明显的特点:就是 HUB 会将接收到的所有数据向 HUB 上的每个端口转发, 也就是说当主机根据 mac 地址进行数据包发送时,尽管发送端主机告知了目标主机的地址, 但这并不意味着在一个网络内的其他主机听不到发送端和接收端之间的通讯,只是在正常状 况下其他主机会忽略这些通讯报文而已!如果这些主机不愿意忽略这些报文,网卡被设置为 promiscuous 状态的话,那么,对于这台主机的网络接口而言,任何在这个局域网内传输的 信息都是可以被侦听到的。 1.1.3 以太网帧的结构 以太网帧的结构是这样。开始的 64 位是前同步码(preamble)和帧首定界符(start frame 4
delimiter)。前同步码是使发送端和接收端在数据的交接上步调一致的信号。发送端以 56 位 (10101010…10)反复发送 1 和 0 信号。接收端接收到这种信号后,准备读取发送来的信号。 前同步码结束后使表示帧的真正开始的 8 位(10101011)位列。帧首定界符之后是地址 等报头信息。帧首定界符后面是接收端及及发送端的 MAC 地址。只有在接收端的 MAC 地 址是自己的 MAC 地址的情况下,才能进行帧的接收;MAC 地址为其他机器的情况下,将 不接收改帧。但当接收端地址全部都为 1 时,在同一以太网内连接的所有设备,都要接收该 帧。地址全部为 1 的 MAC 地址称为广播地址。 接收端和发送端的 MAC 地址后面是 16 位的类型字段(type field)。类型字段中存放的 是以太网帧中传送数据的上层协议的种类代码。以太网帧的报文部最大能存放 12000 位,即 1500 字节。以太网是物理层及数据链路层的协议。以太网帧所传送的数据是网络层规定的 数据包。如果要使用 IP 网络协议,则 IP 数据包就将存储在以太网帧的报文处。 帧的尾部是检查数据错误的错误校验及修正码。一般错误的检验方法有奇偶校验等方 法,但以太网中常使用循环冗余校验(CRC: Cyclic Redundancy Check)检查错误。CRC 中, 将表示帧的位列作为多项式。把多项式与准备好的特定多项式相除,得出的结果与数据一同 发送。在接收端重新进行一次除法运算,用其结果确认传送来的数据正确与否。使用 CRC 不但能检查出是否有错误,而且还能在接收端修正错误。但是,以太网在检查出错误时,该 帧将被删除重新发送。 转发网络集线器是不能识别 MAC 地址的,它将以太网帧向全部端口中继。开关网络集 线器也被称为二层开关。这是因为开关网络集线器是按照数据链路层协议即第二层协议来解 释以太网帧的。使用开关网络集线器与计算机一对一连接起来后,通信线路也完全变成一对 一。即发生不了 CSMA/CD 所预想的冲突。这时接收和发送是并行的,这样的通信称为全双 工通信。而普通的以太网通信线路称为半双工通信。因为在全双工通信中,接收和发送能并 列进行,所以通信速度是半双工的 2 倍。 1.2 IP 数据报的构成 以太网帧中的数据段通常 IP 数据报或与 IP 有关的其他协议,包括 ARP(Address Resolution Protocol)、ICMP(Internet Control Message Protocol)等。 1.2.1 IP 地址 通常所说 IP 地址是指现在所使用的第四版本的 Ipv4 地址协议。其中的 IP 是以 32 位的 二进制数来表示的。通常按 8 位分成 4 段,用十进制的数值表示,中间用点号分开。因此 IP 地址的数值可以从 0.0.0.0 到 255.255.255.255。 5
计算机地址除了 0 和全部为 1 得数值外都可以使用。计算机地址为 0 时,在网路地址中 指定为指向网络本身。计算机地址全部为 1 时,网络地址指定为向全体网络进行通信广播。 网络地址使用多少位取决于一个局域网能容纳的计算机台数。因此,网络地址的位数决定了 IP 地址的分类。 A 类地址中网络地址有 7 位,计算机地址被分配为 24 位。即具有 A 类地址的网络在全 世界只有 100 个左右,是能够容纳 1600 万台计算机的网络。B 类地址使用方便,网络数量 和可容纳的主机数都比较合适,造成现在 B 类地址资源不足,申请分配十分困难。C 类地 址目前还有大量剩余,但是由于一个单位中使用一个 C 类地址,常常不能容纳自己网络上 所有的计算机,因此必须分配给相应的多个 C 类地址。这种情况下,需要使用把这些计算 机作为一个网络的无类别域际路由选择(CIDR: Classless Inter-Domain Routing)技术,使 用不受本来类别制约的地址。进行地址空间的再分配会扩大网络地址的使用,在此种情况下 分配的网络称为子网。使用子网时不能从 IP 地址的类别上区分 IP 地址中哪部分是网络地址。 D 类地址是多点传送地址,向多方传送 IP 数据报。广播会向所有的网络设备传送 IP 数据报, 但是在多点传送中希望接收数据的多台计算机可以接受到 IP 数据报。这种多点传送可以将 声音、图像等向多台网络设备同时传送,因此常被使用在利用网络进行广播的应用程序上。 在因特网中使用的 IP 地址,在世界范围内是不重复的。但是对于因特网没有对外公开 的 IP 地址和其他网络中发生重复是没有关系的。因此,作为没有公开的内部私有地址,要 规定其使用范围。RFC1918 中对私有地址的规定是: 10.0.0.0~10.255.255.255 172.16.0.0~172.31.255.255 192.168.0.0~192.168.255.255 因此在内部私有网中的 IP 常常会是在以上范围内。 下一代的 IP 地址为 Ipv6,IP 地址的位数达到 128 位,IP 地址的个数可以达到现在的 296 倍。这样 Ipv4 地址资源不足的问题将得到解决,而 IP 地址将域网络结构相对应,更加提高 路由的效率。 1.2.2 路由 路由器是工作在 OSI 参考模型第三层——网络层的数据包转发设备。路由器通过转发 数据包来实现网络互连。虽然路由器可以支持多种协议(如 TCP/IP、IPX/SPX、AppleTalk 等协议),但是在我国绝大多数路由器运行 TCP/IP 协议。路由器通常连接两个或多个由 IP 子网或点到点协议标识的逻辑端口,至少拥有 1 个物理端口。路由器根据收到数据包中的网 6
络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据 包头实现转发数据包。路由器通过动态维护路由表来反映当前的网络拓扑,并通过与网络上 其他路由器交换路由和链路信息来维护路由表。 在 IP 中,两个以上的网络间进行通讯时要使用路由器。路由器具有连接两个或两个以 上网络接口。路由器能将因特网上的 IP 数据报进行接力传递。路由器从直接连接在其上的 网络设备中得到的 IP 数据报,适当调整 IP 数据报的传送方向后送出。因为 IP 数据报本身 不含有在因特网上通过怎样的传送的路径到达目的计算机的信息,所以 IP 数据报只依靠接 收端的 IP 地址信息,通过多个路由器进行 IP 数据报的接力传递。 路由器具有两大功能。数据通路功能:对于每个到达路由器的数据包,在不丢失的情况 下,负责寻路。此功能主要包括:转发决定,经由背板输出链路队列调度。转发功能是通过 专门硬件来实现的,每一个通过路由器的分组包都要执行这个操作。数据通路功能对改进路 由器的性能是很重要的。控制功能:主要包括路由表的管理和系统的配置与管理,以及与相 邻路由器交换路由表信息,通过软件实现等。这些功能不是针对每个数据包的,因此使用频 度相对低一些。 路由器要对到达的分组包进行识别、分类以决定其所应接受的服务类型。最初所考虑的 方案是在网络的核心,根据 IP 报头的 TOS(Type of Service)域来识别分组,但是在互联网 的发展过程中,由于一直采用“尽力”传输,同时由于终端在发送 IP 包时不考虑 TOS,因 此,TOS 一直没有发挥作用。目前在边缘设备,根据 IP 分组的源 IP 地址、目的 IP 地址、 源端口号、目的端口号、传输层协议类型来对分组进行识别。此外,为了实现防火墙的功能 也需要对 IP 分组进行识别。 在识别时,每条识别规则采用的是源 IP 地址、目的 IP 地址、源端口号、目的端口号、 传输层协议类型。在上述识别规则中,每个域都可能是一个区间。例如有这样一条识别规则 “202.66.83.X,202.66.72.X,X,23,TCP”(X 表示任意),这条规则识别从网络 202.66.83.X 到网络 202.66.72.X 的 telnet 数据。从几何的角度来看,假如判别时利用了 IP 报头的 K 个域, 这个问题实际上是在一个 K 维空间中有许多互相交叠的实体(每条判别规则对应于一个实 体),每当有一个分组到达时,该分组相当于 K 维空间上的一个点,进行判别实际上是要找 出包含该点的优先级最高的实体。 IP 数据报的路由是按照路由表安排的。路由表即记录着某台网络设备把 IP 数据报传送 到其他网络设备的数据结构。不只是路由器具有路由表,所有使用网络层协议的网络设备都 具有路由表。包括计算机、路由器和 L3 交换器(路由器组)等。 在路由表中,以组的形式记录着 IP 数据报要传送到目的计算机的 IP 地址和为达到最终 7
分享到:
收藏