首页 基于Jpcap的IP数据包分析

基于Jpcap的IP数据包分析

举报
开通vip

基于Jpcap的IP数据包分析 基于 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....

基于Jpcap的IP数据包分析
基于 Jpcap 的 TCP/IP 数据包 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 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 数据包类型的判断 1 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 发送结果分析 2 第一章 太网的结构和 TCP/IP 1.1 以太网的结构 以太网是当今现有局域网采用的最通用的通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 标准。该标准定义了在局域网 (LAN)中采用的电缆类型和信号处理 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。以太网在互联设备之间以 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)的协议 3 集合。而以太网的规格是由美国电气和电子工程师协会(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 位数 据所必需的时间之后,在等待一个随机决定的时间,而后重新发送。这样同时开始发送的两 台网络设备中,随机数小的网络设备先进行发送,随机数大的网络设备要等到网络空闲下来 才能发送。这种等到时间被称为补偿时间。 网络拥挤和多次反复发生冲突,就可能造成数据无法发送。因此,为有效利用网络资源, 4 在网络空闲和拥挤时,对等待的最大值进行调整。空闲时即冲突次数少的情况下,把等待时 间的最大值缩小;拥挤和冲突频繁发生时,把等待时间的最大值扩大。等待时间的最大值可 以用下面的公式表示: T=Ts×2 k 式中 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 5 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。 6 计算机地址除了 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 个物理端口。路由器根据收到数据包中的网 7 络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据 包头实现转发数据包。路由器通过动态维护路由表来反映当前的网络拓扑,并通过与网络上 其他路由器交换路由和链路信息来维护路由表。 在 IP 中,两个以上的网络间进行通讯时要使用路由器。路由器具有连接两个或两个以 上网络接口。路由器能将因特网上的 IP 数据报进行接力传递。路由器从直接连接在其上的 网络设备中得到的 IP 数据报,适当调整 IP 数据报的传送方向后送出。因为 IP 数据报本身 不含有在因特网上通过怎样的传送的路径到达目的计算机的信息,所以 IP 数据报只依靠接 收端的 IP 地址信息,通过多个路由器进行 IP 数据报的接力传递。 路由器具有两大功能。数据通路功能:对于每个到达路由器的数据包,在不丢失的情况 下,负责寻路。此功能主要包括:转发决定,经由背板输出链路队列调度。转发功能是通过 专门硬件来实现的,每一个通过路由器的分组包都要执行这个操作。数据通路功能对改进路 由器的性能是很重要的。控制功能:主要包括路由表的管理和系统的配置与管理,以及与相 邻路由器交换路由表信息,通过软件实现等。这些功能不是针对每个数据包的,因此使用频 度相对低一些。 路由器要对到达的分组包进行识别、分类以决定其所应接受的服务类型。最初所考虑的 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 是在网络的核心,根据 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 地址和为达到最终 8 目的地必须经过的路由器 IP 地址。例如在此网络中的计算机下面这张路由表 接收端 接下来发送地址 192.168.1.0 直接发送到接收端计算机 Default(缺省) 192.168.1.254 路由表 这表示如果接收端的 IP 地址属于自己的局域网,那就使用数据链路层协议的功能将 IP 数据 报直接发给对方,如果是其它则向局域网中存在的路由器发送 IP 数据报。路由器具有的路 由表是很复杂的。在上面的例子中,路由器两侧连接的计算机可以使用各自具有的数据链路 层协议进行直接通信。除此以外在进行计算机通信时,还必须向邻近的路由器发送 IP 数据 报,并进行 IP 数据报的接力传递。 路由器收到数据包以后,会根据数据包中目的地址到路由表中查找相应的路由条目,如 果找到相匹配的路由就会按照该路由处理数据包,否则在缺省情况下会扔弃数据包。路由表 的形成有静态路由和动态路由两种。静态路由时手动记录路由表,适用于小局域网,一点网 络的规模稍微增大则会变得非常麻烦,当网络变更时也需要手动修改。动态路由就是自动交 换路由信息,生成路由表。动态路由的协议中有网络内部使用的内部网关协议(IGP)和网 络间使用的外部网关协议(EGP)。 过去,路由器被看作是最佳转发数据包的硬件设备,软件仅提供监视器的功能。但随着 路由器的发展,软件在路由器中起的作用越来越大。实际上,实时操作系统(如,通信领域 常用 PSOS 和 VxWorks)的选择对一个通信产品来说是至关重要的。如果要开发效率很高的 软件,需要操作系统厂商的支持。像 Cisco 公司,就是自己开发专用的路由器操作系统以及 应用软件。如果这种趋势继续发展,终端用户将来可以很方便地在路由器上装载各种应用软 件模块,使路由器能够提供防火墙、流量管理策略、特殊应用信令、路由策略等功能。 路由器的数据报处理能力对网络的处理能力影响十分大,所以开发了使用硬件进行高速 192.168.1.0 192.168.1.254 路由器 其他网络 9 路由的设备。这样的路由器是在开关网络集线器中附加路由功能,被称为 L3 交换机。 1.2.3 IP 数据报的构成 IP 数据报的最开始存放着 IP 的版本(version)。Ipv4 版本存放为 4。 接下来 IHL 是一个字符,即以 32 位为一个单位,存放着从版本开始到填充结束的报头 的长度。最短的情况没有选项,这是 IHL 的值为 5。 服务类型字段(type of service)表示 IP 数据报在传递时发送端要求的品质。第七位是 为将来预留的扩展位。 数据报长度字段(total length)以 8 位为一个单位,即字节表示 IP 数据报的长度。接下 来的标识字段(identification),从 TCP 等上层协议调用时 IP 数据报的标识号。 标志字段(flags)和数据块偏移(fragment offset)用于对数据块偏移的处理。IP 数据 报要在数据链路层的协议规定下装入帧的报文中传送,由于 IP 数据报中,报文部分最大就 有 65535 为,数据链路层的帧是不能全部容纳的,所以采用叫做分块的方法。分割的数据称 为碎块。IP 数据报的标志表示有无碎块,数据块偏移用于保证数据块偏移按照正确的顺序 处理。 TTL 字段是为了防止错误的 IP 数据报在网络上循环,赋予 IP 数据报一定的寿命。IP 数据报在发送时就在 TTL 字段中设置其寿命。TTL 字段的值在 IP 数据报每通过一次路由器 时,进行一次衰减。当为 0 时,IP 数据报就被删除。通常设为最大值 255。 协议字段(protocol)中存放着表示 TCP 等 IP 的上层协议的值。包括 ICMP、TCP、EGP、 IGP、UDP 等。 在检查错误的报头校验码(header checksum)的后面是发送端地址和目的地址,他们在 Ipv4 中都为 32 位。最后存放的是选项和把报头进行 32 位整数化后余下的位。 version IHL type of service Total length Identification flags fragment offset TTL protocol Header checksum 96 位 IP 数据报头的结构 1.2.4 其它报文结构 比较重要的有地址解析协议和 Internet 控制信息协议。地址解析协议(ARP:Address Resolution Protocol)是连接网络层和数据链路层的,于 IP 没有直接的联系,它是采用以太 10 网的 IP 网络中必需的协议。 在 ARP 中进行的处理是对应于以太网的物理地址(MAC 地址)和 IP 地址。把 IP 数据 报传送到其他计算机时,要从对方的 IP 地址中查询对方的物理地址,使用对方的物理地址 建立新的以太网帧。在使用 IP 进行通信时,就必须知道 IP 地址和对应的 MAC 地址。先进 行以太网的广播功能,将要查询的 MAC 地址的网络设备的 IP 地址通知给其他网络设备。 得到消息的网络设备进行匹配,符合则将自己的 MAC 地址返回过去。从 ARP 中取得的 IP 地址和 MAC 地址的对应关系,保持一段时间用于通信,一段时间后就被删除。把 ARP 反 过来考虑从 MAC 地址查询 IP 地址的情况用 RARP(Reverse ARP),RARP 包和 ARP 包具 有相同的结构,只是 ARP 包的操作号以后的内容不一样。ARP 的操作号为 1(请求)和 2 (响应),请求查询时对象的 MAC 地址为空,RARP 操作号为 3(请求)和 4(响应),请 求时的 IP 地址为空。 在网上通信,可能发生各种情况导致数据包被破坏,造成数据包在网络上循环,这时路 由器等网络设备将删除数据包,然后向发送端请求重新发送数据包。这种通信方式就是由 ICMP 决定的。ICMP 是把消息装入到 IP 数据报的报文部传送的。从这种意义上来说,ICMP 与 TCP、UDP 相同,都属于传输层的协议。但从功能上 ICMP 具有补充 IP 的功能。 ICMP 是“Internet Control Message Protocol”(Internet 控制消息协议)的缩写。它 是 TCP/IP 协议族的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息 是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然 并不传输用户数据,但是对于用户数据的传递起着重要的作用。 1.3 TCP/UDP 1.3.1 TCP/UDP 的作用 传输控制协议(TCP)和用户数据报协议(UDP)是在因特网上传输层使用的协议。使 用网络层的 IP 协议,可以从世界上任何一台计算机中找到特定的通信对象,并向其发送数 据。传输层的协议提供的是连接指定在对方计算机上运行的特定应用程序和希望得到的网络 服务。 TCP 及 UDP 中使用的是端口的概念,以区别计算机上的程序。端口是应用程序在网络 通信上使用的数据输入输出口。当某一网络客户端利用其他计算机上的服务程序时,在根据 IP 地址指定服务计算机的同时,也指定了被分配的服务程序的公认端口号。由此,可以利 用与端口号对应的特定的网络服务。 TCP/UDP 数据报 11 IP 数据报 通常的过程如下:客户端程序从用户处得到运行服务器程序的计算机 DNS 名和服务器 程序的应用程序名。客户端程序利用从用户处得到的 DNS 名检索 DNS 服务器,得到连接对 象的计算机的 IP 地址。并且从应用程序名中检索到服务器程序的公认端口号。再从应用程 序名中决定作为传输层协议是使用 TCP 还是 UDP。然后从对方的 IP 地址、自己的 IP 地址、 对方的端口号及指定 TCP 或 UDP 中,建立将 TCP 或者 UDP 存放到报文的 IP 数据报。运 行系统再把通信上的合适端口分配给客户端程序。这样就确定了由 IP 地址、端口号及 TCP 或 UDP 组成的世界上不重复的数据组合。客户端程序把含有 TCP/UDP 数据包的 IP 数据报 发送出去,服务程序将响应同样发给客户端程序。 TCP 协议是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的 连接。一个 TCP 连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们 这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的 简单过程:主机 A 向主机 B 发出连接请求数据包:“我想给你发数据,可以吗?”,这是第 一次对话;主机 B 向主机 A 发送同意连接和要求同步(同步就是两台主机一个在发送,一 个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机 A 再 发出一个数据包确认主机 B 的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三 次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机 A 才向主 机 B 正式发送数据。 TCP 和 UDP 把端口通信功能提供给应用程序。但是 TCP 和 UDP 在性质上由差别。TCP 中补充了 IP 没有提供的网络功能,在两个程序之间提供一条没有错误的全双工通信线路。 所有使用 TCP 为传输层协议的应用程序要利用网络是十分方便的。数据的再次发送、错误 处理和数据包到达顺序的控制等处理在 TCP 的处理部分进行,在应用程序上不需要进行相 关的处理。但是,为了提供面向连接这种高级功能,TCP 对计算机系统来说负载很大,速 度较慢。 它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。UDP 只是在 IP 的功能中追加了端口功能的简单结构。因此,对要求处理速度的应用程序提供了 传输层功能。UDP 中连接和数据的顺序控制等功能由应用程序来完成。这种性质被称为无 连接。所以在错误少的局部环境下并要求快速的应用程序中,常用 UDP 来实现。UDP 适用 于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令 报头部分 报文部分 报头信息和地址 报文部分 12 来测试两台主机之间 TCP/IP 通信是否正常,其实“ping”命令的原理就是向对方主机发送 UDP 数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来, 那么网络就是通的。例如,在默认状态下,一次“ping”操作发送 4 个数据包。发送的数据 包数量是 4 包,收到的也是 4 包(因为对方主机收到后会发回一个确认收到的数据包)。这 充分说明了 UDP 协议是面向非连接的协议,没有建立连接的过程。正因为 UDP 协议没有连 接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如 TCP 协议高。QQ 就使 用 UDP 发消息,因此有时会出现收不到消息的情况。 1.3.2 TCP/UDP 报文结构 TCP 报文头开始部分存放的是发送端端口号(source port)和接收端的端口号(destination port),顺序号(sequence)中存放的是按照发送顺序处理的相关数值。用来表示将某消息段 中的数据位全体数据块的字节数与进行通信时某一个规定的偏移量相加后的数值。 确认号(acknowledgment number)是接收端对于发送端接收到的数据块状态的顺序号。 具有 4 位的数据偏移字段(data offset)是以 32 位为一个单位存放报头长度的数值。从 TCP Source port destination port Sequence acknowledgment number 1 2 3 window checksum urgent pointer options, padding 96 位 1:data offset 2:reserved 3:control bits TCP 数据报头的结构 消息段开始的部分到数据偏移×4 字节后存放的就是 TCP 的报文部分。 用于扩展的 6 位字段后面是控制位(control bits)。控制位是 6 位标志的集合,表示 TCP 以怎样的状态进行通信。控制位的位置在 1 为 URG,表示紧急数据指针有效;控制位在 2 为 ACK,表示确认号有效;控制位在 3 为 PSH,表示传送强制功能;控制位在 4 为 RTS, 表示请求连接重新设置;控制位在 5 为 SYN,表示请求顺序号同步处理;控制位在 6 为 FIN, 表示发送结束。 Window 表示接收端缓存的数值。接下来检查错误用的校验码(checksum)和为处理紧 急数据而配置的紧急数据指针(urgent pointer),最后放的是选择和填充(options, padding) UDP 数据报构造相对比较简单。UDP 数据报中含有作为传输层协议实现接收所必需的 端口号字段、数据报长度及错误检查用校验码。UDP 能进行高速的信息传递,但数据报顺 序控制的工作要由应用程序来完成。UDP 这种协议只是在 IP 提供的功能中加上了端口的概 13 念,是简单的传输层协议。 source port destination port length checksum data UDP 数据报的结构 第二章 Jpcap 类库 2.1 Jpcap 的使用 Jpcap 是 2003 年日本开发的一套能够捕获、发送网络数据包的 java 类库。因为核心 Java API 不能访问底层的网络数据,但 Jpcap 是一种提供在 Windows 或 UNIX 系统上进行这种访 问的 Java API。Jpcap 不是一种纯粹的 Java 解决方案,它依赖本地库的使用。在 Windows 或 UNIX 上,你必须有必要的第三方库,分别是 WinPcap 或 libpcap。要在 java 中使用 Jpcap 类库需要安装 Jpcap 的运行和开发环境。 2.1.1 Jpcap 运行环境的安装 Win32:先安装 Java2 工作平台 JRE,J2SE 或 JBuilder8,也可以安装 SDK,然后安装 最新版本的 WinPcap,然后解压缩 Jpcap。 UNIX/LINUX:同 Win32 环境。 2.1.2 JPCAP 开发环境安装 Win32: 1 复制“lib\Jpcap.dll”到“[JRE directory]\bin” or “[JRE directory]\lib\ext\x86”。 2 复制“lib\jpcap.jar”到“[JRE directory]\lib\ext”。 3 如果安装了 SDK,还需要拷贝“lib\jpcap.jar”到“[SDK directory]\jre\lib\ext”。 其中[JRE directory]是指 JRE默认安装路径,一般来说是C:\Program Files\Java\j2re*;[SDK directory] 是指 SDK 的默认安装路径,一般来说是 C:\j2sdk*。 打开 JBuilder8 的工程,选“Tools/Configure JDKs/ Add”将\lib 中的 jpcap.jar 加入。将 \sample\tcpdump.java 加入,即可编译运行。 UNIX/LINUX 1 在解压缩的 Jpcap 文件夹中,进入 src\c 目录,编辑 Makefile 文件。 2 运行 make,如果你看到错误信息:structure has no member named ‘sa_len’,则在 Jpcap_sub.h 中屏蔽#define HAVE_SA_LEN 这一行。 3 拷贝文件 libjpcap.so 到 java 目录/jre/lib/. 是 i386 或 sparc 14 4 拷贝文件 lib/jpcap.jar 到 java 目录/jre/lib/ext 下. 2.2 Jpcap 介绍 Jpcap 类库的基本结构如下图: Jpcap 类库结构 2.2.1 Packet 基类及其子类 Packet 这个类是所有被捕获的数据包的基类,可以提供被捕获数据包的长度,被捕获数 据包的时间标记等基本信息。 ARPPacket 和 IPPacket 是继承 Packet 的子类,它们将被捕获包分成两类。ARPPacket 按照 ARP 数据报的内容,将其各数据段的数据取出。IPPacket 则被分得更细。这两个类主 要与是与数据链路层密切相关的,其与 MAC 地址相关的信息在 EthemetPacket 类中表示出 来。EthemetPacket 是从 DatalinkPacket 继承而来的。 IPPacket 下有三个子类,分别是 ICMPPacket、TCPPacket、UDPPacket。这三个类分别 表示的是被存储在 IP 数据报的报文中发送的 ICMP、TCP、UDP 报文。 ICMPPacket 在用 toString 方法直接转化,得到字符串为: type(type) code(code) 类型 执行命令 TCPPacket 在用 toString 方法直接转化时,得到字符串为: src_port > dst_port seq(sequence) win(window) [ack ack_num] [S][F][P] 源端口 >目的端口 顺序号 窗口 [确认号] [控制位代号] UDPPacket 得到的是: src_port > dst_port JpcapHandler IPAddress IPv6Option Jpcap JpcapWriter JpcapSender DatalinkPacket EthemetPacket Packet ARPPacket IPPacket ICMPPacket UDPPacket TCPPacket 15 源端口 >目的端口 在被捕获包的基本信息就可以通过直接转化为字符串而得到。 2.2.2 Jpcap 的主要功能 Jpcap 提供了十分方便的数据包捕获方法。Jpcap 使用一个事件模型来处理包。首先, 必须创建一个执行接口 jpcap.JpcapHandler 的类。 public class Jpcaphandler implements JpcapHandler { public void handlePacket(Packet packet){ System.out.println(packet); } } 为 了 捕 获 包 , 需 要 让 Jpcap 知 道 要 用 哪 个 网 络 设 备 来 监 听 。 API 提 供 了 jpcap.Jpcap.getDeviceList()方法以满足这一目的。这个方法返回一列字符串,可以按一下方 法如下使用它: String[] devices = Jpcap.getDeviceList(); 一旦有了一个设备名称的目录,只要从其中选取一个用来监听: String deviceName = devices[0]; 选择一个设备之后,通过 Jpcap.openDevice()方法打开它。openDevice()方法需要四个参数: 即将打开的设备名,从设备上一次读取的最大字节数,说明是否将设备设为混杂模式的 Boolean 值,和以后调用 processPacket()方法要使用到的超时值。 Jpcapjpcap = Jpcap.openDevice(deviceName, 1024, false, 10000); openDevice()方法将一个参数返回到用以捕获的 Jpcap 对象。既然有了 Jpcap 实例,你可以调 用 processPacket() 或 loopPacket()开始监听了。这两种方式都带有两个参数:捕获的最大包 数可以是-1(说明没有限制);执行 JpcapHandler 的一个类的实例。 如果你调用 processPacket(),那么 Jpcap 将一直捕获包,直到超过 openDevice 中规定的时限 或达到了规定的最大包数。loopPacket()则将一直捕获包,直到达到最大包数,如果没有最 大数限制,它将永远运行下去。就像下面这样调用: 16 jpcap.loopPacket(-1, new Jpcaphandler()); 对于捕获的数据包,可以利用 Jpcap 中的 Packet 及其子类进行分类分析,获得数据包的 详细信息。 Jpcap 还有进行数据包过滤的函数 setFilter(java.lang.String condition, boolean optimize)。 其中 condition 是过滤条件。在进行数据包捕获前设置过滤条件,可以将不感兴趣的数据包 剔除。 jpcap.setFilter("host 210.212.147.149",true); 因为 Jpcap 对数据包进行了分类,而数据包中的关键字段也有接口调用,所以在设置过滤条 件时也可以在利用这些条件进行更细致的分类。这将在后面的章节中介绍。 Jpcap还提供了用来发送数据包的一个类 JpcapSender,可以用来发送 IPPacket及其子类, 包括 IPPacket、ICMPPacket、TCPPacket、UDPPacket。定义好一个相应的包后,就可以利 用 sendPacket 函数发送数据包。 JpcapSender sender=JpcapSender.openDevice(Jpcap.getDeviceList()[0]); sender.sendPacket(p); //send a packet 17 第三章 数据包监听程序的设计 3.1 数据包监听原理 网络监听是指利用计算机的网络接口截获目的地为第三方计算机的数据报文的一种技 术。利用这种技术可以监听网络的当前流量状况;网络程序的运行以及非法窃取网络中传输 的机密信息。 在共享式以太网中,所有的通讯都是广播的,也就是说通常在同一网段的所有网络接口 都可以访问在物理媒体上传输的所有数据,使用ARP和RARP协议进行相互转换。在正常的 情况下,一个网络接口应该只响应两种数据帧:与自己硬件地址相匹配的数据帧和发向所有 机器的广播数据帧。在一个实际的系统中,数据的收发由网卡来完成。每个以太网卡拥有一 个全球难一的以太网地址。以太网地址是一个48位的二进制数。在以太网卡中内建有一个数 据报过滤器。该数据报过滤器的作用是保留以本身网卡的MkC地址为通讯目的的数据报和 广播数据报,丢弃所有其它无关的数据报,以免除CPU对无关的数据报作无谓的处理。这是 以太网卡在一般情况下的工作方式。在这种方式下,以太网卡只将接收到的数据报中与本机 有关部分向上传递。然而数据报过滤器是可以通过编程禁用的。禁用数据报过滤器后,网卡 将把接收到的所有的数据报向上传递,上一层的软件因此可以监听以太网中其它计算机之间 的通讯。我们称这种工作模式为“混杂模式”。多数网卡支持“混杂模式”,而该模式还是微软 公司的“pC99”规范中对网卡的一个要求。 网卡的“混杂模式”使得采用普通网卡作为网络探针,实现网络的侦听变得非常容易。一 方面方便了网络管理,另一方面,普通用户也能轻易地侦听网络通讯,对用户的数据通讯保 密是一个很大的威胁。 在进行此种方式的数据监听时,是在网络的节点处设置网络设备为混杂模式,进行数据 监听管理网络;黑客则是利用ARP侦探网络上出于混杂模式的网络节点并将黑客软件放置在 节点处进行窃听的。 还有一种窃听方式是利用ARP欺骗达到的。ARP欺骗又被称为ARP重定向技术,ARP地 址解析协议虽然是一个高效的数据链路层协议,但是作为一个局域网的协议,它是建立在各 主机之间互相信任基础之上的,因此存在一定的安全问题:(1)主机地址映射表是基于高 速缓存动态更新的,这是ARP协议的特色,也是安全问题之一。由于正常的主机间MAC地 18 址刷新都是有时限的,这样假冒者如果在下次更新之前成功的修改了被攻击机器上的地址缓 存,就可以进行假冒。 (2)ARP请求以广播方式进行。这个问题是不可避免的,因为 正是由于主机不知道通信对方的MAC地址,才需要进行ARP广播请求。这样攻击老就可以 伪装ARP应答,与广播者真正要通信的机器进行竞争。还可以确定子网内机器什么时候会刷 新MAC地址缓存,以确定最大时间限度的进行假冒。(3)可以随意发送ARP应答包。由于 ARP协议是无状态的,任何主机即使在没有请求的时候也可以做出应答,只要应答有效,接 收到应答包的主机就无条件的根据应答包的内容更新本机高速缓存。(4)ARP应答无需认 证。由于ARP协议是一个局域网协议,设计之初,出于传输效率的考虑,在数据链路层就没 有作安全上的防范。在使用ARP协议交换MAC地址时无需认证,只要收到来自局城网内的 ARP应答包,就将其中的MAC/IP对刷新到本主机的高速缓存中。 ARP重定向的实施办法是根据以上ARP地址解析协议的安全漏洞,进行网络信息包的截 获以及包的转发攻击活动, 步骤 新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤 如下:(1)把实施攻击的主机的网卡设置为混杂模式。(2) 在实施攻击的主机上保持一个局域网内各个IP/MkC包的对应列表,并根据截获的IP包或者 ARP包的原IP域进行更新。(3)收到一个IP包之后,分析包头,根据IP包头里的IP目的地址, 找到相应的MAC地址。(4)将本机的MAC地址设成原MAC地址,将第二步查到的MAC地 址作为目的MAC地址,将收到的IP包发送出去。通过以上的重定向,攻击者使网络数据包 在经过攻击者本身的主机后,转发到数据包应该真正到达的目的主机去,从而具有很强的欺 骗性。 本文中采用的是第一种方法,即在共享以太网中通过网卡在混杂模式工作,监听整个以 太网的数据包。 3.2 以太网帧的监听 在第二章中已经介绍了如何使用Jpcap将网卡设定为混杂模式,并获得网络数据包。获 取到的数据包是在JpcapHandler接口类中进行处理的。 3.2.1 获取MAC地址 要从被捕获的数据包中获得 MAC 地址需要如下代码: //取得 packet 中数据链路层的数据段 EthernetPacket ethernetPacket=(EthernetPacket)packet.datalink; //获得 MAC 地址 System.out.print("源 MAC 地址"+ethernetPacket.get
本文档为【基于Jpcap的IP数据包分析】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_056754
暂无简介~
格式:pdf
大小:697KB
软件:PDF阅读器
页数:35
分类:互联网
上传时间:2012-01-30
浏览量:82