logo资料库

基于Linux操作系统下的数据包截取与分析.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
摘要
1.绪论
1.1 研究背景
1.2 研究意义
1.3 研究方向
2.网络协议
2.1以太网
2.1.1以太网的简介
2.1.2 以太网技术
2.1.3以太网帧的构成
2.2 IP协议
2.2.1 IP简介
2.2.2 IP数据报的构成
3.程序总体设计
3.1 Libpcap库
3.2 libnet:分组构造与输出
3.3 程序设计
3.3.1 udpcksum.h头文件
3.3.2 main 函数
3.3.3 open_pacap函数
3.3.4 test_udp函数
3.3.5 makefile 文件
3.4 实验结果
4. 总结
4.1结论
4.2网络安全的防范措施
参考文献:
目 录 摘要 .................................................................................................................................................... 2 关键词................................................................................................................................................ 2 1.绪论.............................................................................................................................................. 2 1.1 研究背景 ............................................................................................................................ 2 1.2 课题研究意义 .................................................................................................................... 2 1.3 研究方向 ............................................................................................................................ 3 2.网络协议...................................................................................................................................... 3 2.1 以太网................................................................................................................................. 3 2.1.1 以太网的简介 ......................................................................................................... 3 2.1.2 以太网技术 ............................................................................................................ 3 2.1.3 以太网帧的构成 .....................................................................................................4 2.2 IP 协议 ............................................................................................................................... 4 2.2.1 IP 简介................................................................................................................... 4 2.2.2 IP 数据报的构成...................................................................................................6 3.程序总体设计.............................................................................................................................. 7 3.1 Libpcap 库......................................................................................................................... 7 3.2 libnet:分组构造与输出 ..................................................................................................7 3.3 程序设计 ............................................................................................................................ 8 udpcksum.h 头文件 .............................................................................................9 main 函数 ............................................................................................................ 9 open_pacap 函数 ...............................................................................................10 test_udp 函数 ...................................................................................................10 makefile 文件 ..................................................................................................10 3.4 实验结果 .......................................................................................................................... 11 4. 总结 .......................................................................................................................................... 12 4.1 结论 ................................................................................................................................... 12 4.2 网络安全的防范措施.......................................................................................................12 参考文献:...................................................................................................................................... 13 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 1
基于 Linux 操作系统下的数据包截取与分析 姓名:黄明亮 学号:200440901153 指导老师:王亚 摘要 计算机网络具有联结形式的多样性、终端分布不均匀性和网络的开放性、互连性等特征,致使网络受 黑客、恶意软件和其他不轨的攻击,所以网上信息的安全保密是一个重要的问题,也是网络世界里一个很 热门的研究方向。 本文主要是对网络中数据包的截获和分析的研究。因为对于网络安全研究的初步就是要对网络中传输 的数据包内容的分析,所以如何获得这些数据包是至关重要的。本文首先是对网络知识的一个全面的阐述, 对以太网结构以及以太帧的分析,特别是对 TCP/IP 协议的全面了解。然后,重点论述了对截获网络数据包 的研究分析,通过套接口编程来获取特定的数据报,。包括对原理分析、框架结构和程序的实现等部分。 关键词:以太网 数据包 Linux 操作系统 数据包捕获 套接口 1.绪论 1.1 研究背景 计算机系统在现实生活中得到了广泛应用,并早已渗透到人们的日常生活中。随着网络 的普及和电子商务的发展,网络的安全问题也越来越突出。不断报道的黑客攻击事件和各种 新病毒的出现使广大用户对网络和电子商务的安全性产生信任危机,阻碍了 Internet 和电 子商务的进一步发展。这些黑客的攻击不单是造成网络和主机资源的消耗,而且导致许多敏 感信息的泄露。 根据数据统计,信息窃贼在过去 5 年中以 250%速度增长,99%的大公司都发生过大的入 侵事件。世界著名的商业网站,如 Yahoo,Buy,EBay,Amazon,CNN 等都曾被黑客入侵。为向使 用者提供安全,可靠,稳定网络传输数据,排除网络故障等方面具有不可替代的作用。 本文的网络监视实现在应用层对数据链路层的控制,完成对网上流动的数据帧的实时 截取与分析。网络监视的意义在于监视网上流动的信息。首先,网络监视可以用于监视网络 信息,杜绝不健康站点的不健康内容,维护网络环境。其次,可以用于安全防范、监视信息 内容、保障网络安全、截获情报等方面。在计算机网络上实施有效的攻击与保护,是网络检 测技术在网络完全方面的重要发展之一。另外,网络监测还可用于教学目的,对我们熟悉网 络体系结构、网络通信协议及网络底层通信有较大帮助。所以,网络信息监测有着广阔的应 用前景。 1.2 研究意义 我国的网络正在快速发展中,相应的问题也就显现出来,网络管理及相应应用自然将越 发重要,而监听技术正是网络管理和应用的基础,其意义当然重要,放眼当前相关工具 linux 有 snort tcpdump ,snift 等,window 有 nexray, sniffer 等无一不是国外软件,随着中 国网络的发展,监听系统必将大有用武之地,因此监听技术的研究已是时事的要求。 中国入世,各种针对盗版的打击力度和对于正版软件的保护力度都将大大加强,windows 2
的盗版软件随处可见的现象将会一去不返,面对这样的情况,大部分的公司只有两种选择: 要么花大价钱向微软购买正版软件,要么是用自由操作系统 linux,特别是重要部门,如国 家机关,政府部门,难道要把自己的办公系统操纵在国外大公司手里?北京的政府办公系统 已经转用红旗 linux,而且 linux 的界面也在不但的改进,更加友好易操作,我们有理由相 信.linux 将在我国大有作为,这也是研究 Linux 下网络监听的原因。 关于 Linux 下网络监听技术主要有两个要点: 1)如何尽可能完整的截取网络上的数据帧,因为以太网上每时每刻都可能有信息传递, 而且根据以太网的规模不同网络上的信息量也变化不大,所以截取数据帧不仅要保证数据帧 的完整,而且还要考虑到如何才能减少漏截取数据帧。 2)就是对截取的数据帧的过滤分析,所谓监听当然要“听”得懂才行,所以把截取的数 据帧翻译成我们能用的数据,监听才算成功。 1.3 研究方向 目前来说,网络监测主要通过两种方法从网络上捕获数据;第一种是基于特定的硬件; 第二种是在普通 PC 或工作站上用软件实现。后者利用计算机的网络适配器从网络上获得数 据帧,然后用软件进行大量的数据包处理。这种利用软件实现网络监测的功能较之运用特定 硬件监测来说虽然性能较差,但是他价格便宜,容易修改和升级,因此得到了广泛的应用。 2.网络协议 2.1 以太网 2.1.1 以太网的简介 以太网(Ethernet)是 20 世纪 70 年代,施乐(XEROX)公司的 Palo Alto 研究所设计 的,其后在 80 年代由施乐、英特尔、DEC(后被康柏收购)三家公司总结了面向局域网(LAN) 的协议的集合。给予以太网的定义是 OSI 参考模型中关于第一层与第二层的协议。 2.1.2 以太网技术 在以太网中,数据是以被称为帧的数据结构体为单位进行交换的。通常,在计算机网络 上进行交换的数据结构体是数据包,而在以太网中使用的数据包称为帧。这种数据包如图 2.1 所示,是记录着数据包发送给对方所必须信息的报头部分和记录着传送给接收端信息内 容的报文部分组成的。报头包含接收端的地址、发送端的地址、数据错误检查和改正所必需 的错误检验和修正码。数据包被传送到网络上,通过网络中继装置传送到接收端。 表 2.1 数据包的一般结构 报头 接收端的地址 发送端的地址 错误检验和修正码 报文 发送到接收端的信息 下面讲解一下以太网上的帧是如何被发送出去的。在以太网上,帧是被称为带碰撞检测 的载波侦听多址访问(CSMA/CD:Carrier Multiple Access with Collision Detection) 发送的。 在 CSMA/CD 技术中如果网络上没有数据,则任何时候都可以将数据传送出去。因此,传 送数据的网络设备,首先要确认网络上是否有数据在传输。如果没有数据则将数据发送到网 络上。如果网络被使用,那就要等到网络空闲后发送。上面的工作相当于 CSMA/CD 中的 CSMA 部分。 3
在这种方法中,同时发送数据的网络设备会同时认为网络是空闲的。这样就会发生冲突。 因此,在 CSMA/CD 技术中会经常一边检测冲突(collision),一边发送数据。 在使用同轴电缆的以太网中,冲突就是字符信号发生碰撞从而导致数据包的损坏。另外, 在使用双绞线和光纤电缆通信时,因为发送和接收各自的通信线路,所以没有信号碰撞的情 况。但是在发送数据时,在同时从接收用的通信线路接收信号的情况下,也会发生冲突。 如果检测出冲突,为强调冲突的发生,要等待发送出 32 位数据所必需的时间之后,在 等待一个随机决定的时间,而后重新发送。这样同时开始发送的两台网络设备中,随机数小 的网络设备先进行发送,随机数法的网络设备要等到网络空闲下来才能发送。这种等待时间 被称为补偿时间。 2.1.3 以太网帧的构成 以太网帧的结构如图 2.2 所示。在这个以太网帧的报头中包含接受端及发送端的地址, 帧的报文部分包含的是数据种类。最后放置的是错误检验和修正码。 表 2.2 以太网帧的构造 接收端的 MAC 地址(48 位) 发收端的 MAC 地址(48 位) 类 型 字 段 (16 位) 数 据 ( 最 大 12000 位) 错误检验、修 正码(32 位) 前 同 步 码 和 开 始 帧 分 界 符 (64 位) 在以太网中,地址用 48 位二进制数来表示。这种地址被称为 MAC 地址。在以太网上进 行通信时,用 MAC 地址来区分机器。因此,MAC 地址不能和其他的网络地址重复。所以,MAC 地址必须按照一定的管理办法来进行分配,这种分配的工作由 IEEE 来管理。IEEE 把 MAC 地 址 的 前 24 位 分 配 给 网 络 设 备 制 造 商 。 这 24 位 代 码 被 称 为 组 织 惟 一 标 识 符 ( OUI : Organizational Unique Identifier)。 下面讲解以太网的构造,开始的 64 位是前同步码(peramble)和帧首定界符(start frame delimiter)。前同步码是使发送端和接收端在数据的交接上步调一致的信号。发送端以 56 位(10101010…10)反复发送 1 和 0 信号。接收端接受到这种信号后,准备读取发送来的 信号。前同步码结束后是表示帧的真正开始的 8 位(10101011)位。帧首界定符后面是接受 端和发送端的 MAC 地址。如前面所述,只有在接受端的 MAC 地址是自己的 MAC 地址的情况下, 才能进行帧接收;MAC 地址为其他机器的情况下,将不能接受该帧而要把它删除。但当接受 端的地址全部都为 1 时,在同一以太网内连接的所有设备,都要接收该帧。地址全部为 1 时的 MAC 地址称为广播地址。 接受端和发送端的 MAC 地址后面是 16 位的类型字段(type field)。类型字段中存放的 是以太网中传送数据的上层协议的种类代码。这种代码是由规定以太网协议的 RFC(request for comments)1700 号规定的。 以太网帧的报文部最大能存放 12000 位,即 1500 字节。以太网是物理层及数据链路层 的协议。以太网帧所传送的数据是网络层规定的数据报。如果要使用 IP 网络协议,则 IP 数据包(即后面要讲解的 IP 数据报)就将存储在以太网帧的报文处。帧的尾部是检查数据 错误的错误校验及修正码。一般错误的检验方法有奇偶校验等方法,但以太网中常使用循环 冗余校验(CRC:Cyclic Redundancy Check)检查错误。 2.2 IP 协议 2.2.1 IP 简介 现在使用的 IP 是第四版本的。第四版本的 IP 表示为 IPv4。关于 IPv4 的 IP 地址是以 32 位的二进制数来表示的。通常按 8 位分成四段,用十进制的数值表示,中间用句号分开。 4
8 位的二进制数可以表示从 0 到 255 的十进位制数,所以 IP 地址的数值可以从 0.0.0.0 到 255.255.255.255。 IP 地址可以分为两大部分。一部分是网络自身的地址,另一部分是计算机的地址。网 络地址位于 IP 地址的前半部分,计算机地址位于 IP 地址的后半部分。 计算机地址除了全 0 和全部为 1 的数值之外都可以使用。计算机地址为 0 时,在网络地 址中指定为指向网络本身。计算机地址为 1 时,网络地址指定为向全体网络进行通信广播。 网络地址使用多少位取决于一个局域网能够容纳的计算机台数。因此,网络地址的位数 决定了 IP 地址的分类。表 2.3 中表示的是 IP 地址的分类。在这张表中,参照位的结构可以 分为 IP 地址的分类。 表 2.3 IP 地址的分类 类 型 地址的位结构(x 表 示网络地址,y 表示 计算机地址) 网 络 地 址 可 以 取 得 的 数 值范围 计 算 机 地 址 可 以 取 得 的 数值范围 用 途 A 类 0xxxxxxx,yyyyyyyy yyyyyyyy,yyyyyyyy 0~127 0.0.0 ~ 255.255.255 B 类 10xxxxxx,xxxxxxxx yyyyyyyy,yyyyyyyy 128.0 191.255 ~ 0.0 255.255 ~ C 类 110xxxxx,xxxxxxxx xxxxxxxx,yyyyyyyy 192.0.0. ~ 255.255.255 0~255 D 类 1110xxxx E 类 1111xxxx - - - - 大 规 模 网 络(可容纳 计 算 机 约 1677 万 台) 中 规 模 网 络(可容纳 计 算 机 约 6.5 万台) 小 规 模 网 络(可容纳 计 算 机 约 254 台) 多 点 传 送 ( 对 于 待 定 组 的 传 送) 预留 A 类的地址中网络地址有 7 位,计算机地址被分配为 24 位。即具有 A 类地址的网络在 全世界只有 100 个左右,是能够容纳 1600 万台计算机的网络。通管 IP 地址分配的 InterNIC (Network Information Center)现在已不分配 A 类地址了。 与 C 类地址相比,B 类地址因为使用方便,所以在开始分配 IP 地址时就颇受欢迎。从 而造成了现在 B 类地址资源部足的情况,导致申请分配十分困难。 C 类地址目前还有大量剩余,申请分配的 C 类地址能容纳 250 台计算机。 但是,由于一个单位中使用一个 C 类地址,不能容纳网络上所有的计算机,因此,必须 分配给相应的多个 C 类地址。这种情况下,需要使用把这些计算机作为一个网络的无类别路 由选择技术,使用不受本来类别制约的地址。 与此相反,进行地址空间的再分配,会扩大网络地址的使用。例如对于 C 类地址,网络 5
地址为 25 位。这样的话在单位中建立两个局域网,参照地址的前 25 位,就能判断出向哪个 局域网分配 IP 数据报。 这种情况下分配的网络称为子网。使用子网是不能从 IP 地址的类别上区分 IP 地址中哪 部分是网络地址。因此,在网络地址的后面用斜线记录的数值来表示网络地址的范围。换言 之,把用微结构表示子网大小的子网掩码地址的网络地址部分的位数写在 IP 地址后面。例 如: 133.1.1.1/24。由此可见,它不是 B 类地址,在网络中使用的网络地址为 24 位。D 类 地址是多点传送地址,向多方传送 IP 数据报。广播会向所有的网络设备传送 IP 数据报,但 是在多点传送中希望接收数据的多台计算机可以接收到 IP 数据报。这种多点传送可以将声 音、图像等向多台网络设备同时传送,因此常被使用在利用网络进行广播的应用程序上。 在英特网中使用的正式 IP 地址,在世界范围内使不重复的。但是对于因特网没有公开 的和在其他网络中发生重复的地址是没有关系的。因此,作为没有公开的私有地址,要规定 其可以自由使用的范围。RFC1918 种对私有地址进行了规定,表 2.4 中表示了可以使用的私 有 IP 地址的范围。 表 2.4 私有 IP 地址的下限 地址的上限 10.0.0.0 172.16.0.0 192.168.0.0 10.255.255.255 172.31.255.255 192.168.255.255 下一代的 IP 地址为 IPv6,其 IP 地址将达到 128 位,位长是 IPv4 的 4 倍。从可以容纳 的 IP 地址的个数上来说,是现在的 2 倍。这样,IPv4 资源严重枯竭的问题就可以得到解决, 同时 IP 地址将完全与网络结构向对应,会更加提高路由的效率。 2.2.2 IP 数据报的构成 IP 数据报的构成如表 2.5 所示。 标 识 16 标 志 3 版 本 4 报 头 长 度 4 服 务 类 型 8 数 据 报 长 度 16 数 据 协 议 8 生 存 时 间 8 数 据 块 偏 移 13 报 头 校 验 码 16 发 送 端 地 址 32 目 的 地 地 址 32 选 项 和 填 充 32 表 2.5 IP 数据包的构成 IP 数据报的前部存放着 IP 的版本。IPv4 时存放的为 4。接下来报头长度是一个字符, 即以 32 位为一个单位,存放着从版本开始到填充结束的报头的长度。最短的情况是没有选 项,这时 IHL 的值为 5。数据报长度字段以八位为一个单位,即字节表示 IP 数据报的长度。 接下来是标示字段,从 TCP 等上层协议调用时 IP 是据报的标示号。标志字段和数据块偏移 用于对数据块偏移的处理。如前面所述,IP 数据报要在数据链路层的协议规定下,装入帧 的报文中传送。但 IP 数据报中,致使报文部分最大就有 65535 位,数据链路层的帧是不能 全部容纳的。 以太网帧中报文部的最大长度为 12000 位。大的 IP 数据报是不能全部放到以太网帧中 的。这时只有分割 IP 数据报,才能装入到以太网帧中。这种操作称为分块,分割的数据称 为碎块。IP 数据报的标志表示有无碎块,数据块偏移用于保证数据块偏移按照正确的顺序 处理。 TTL 字段是为了防止错误的 IP 数据报在网络上循环,赋予 IP 数据报一定的寿命。IP 数据报在发送是就赋予了其规定的寿命,这个值设置在 TTL 字段中。TTL 字段值在 IP 数据 6
报每通过一次路由器时,进行一次衰减。当 TTL 字段的值为 0 时,其 IP 数据报就被删除掉。 TTL 的初始值应该大于必须经过的路由器数,即使 IP 数据报在网络上循环也不能永久的存 在。但是,如果 TTL 字段设置的初始值过小就不能进行正常的通信了。因为 TTL 字段为 8 位,TTL 的最大值为 255,所以通常将 TTL 的初始值设为 255。 协议字段中存放着表示 TCP 等 IP 的上层协议的值。表 2.6 为协议字段的数值及意义。 表 2.6 协议字段的值(摘录) 编号 关键字 意 义 1 6 8 9 ICMP Internet Control Message Protocol(Internet 控制信息协议) TCP Transfer Control Protocol(传输控制协议) EGP Exterior Gateway Protocol(外部网关协议) IGP Interior Gateway Protocol(内部网关协议) 17 UDP User Datagram Protocol(用户数据报协议) 在检查错误的报头校验码的后面是发送端地址和目的地地址,它们在 IPv4 中都为 32 位。最后存放的是选项和把报头进行 32 位整数化以后余下的位。 3.程序总体设计 3.1 Libpcap 库 Libpcap(Packet Capture Library,数据包捕获函数库)提供的 C 函数接口可以用于 需要捕获经过网络接口(只要经过该接口,目标地址不一定为本机)数据包的系统开发上。 由 Berkeley 大学 LawrenceBerkeley Nation Laboratory 研究院的 Van Jacobson, Craig Lered 和 Steven McCanne 编写,该函数库支持 Linux,Solaris 和 BSD 系统平台。Libpcap 是一个独立于操作系统执行的访问数据链路层的方法,它具有良好的兼容性,使一个与实现 无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,这个库为不同平台提供了一 致的编程接口,在安装了 Libpcap 的平台上,以 Libpcap 为接口写的程序能够自由的跨平台 使用。 过滤机制在实际的应用中,不需要读取所有的包,通常只关心某一类的包,例如,在 某一子网络传输的包或传输到某一地址的包。Libpcap 提供内部过滤机制,不但简化了应用 程序,还提高了效率。过滤规则是以字符串形式表达的,可以包括如下 3 种规则的一个或多 个。 类型限定 类型包括 host,net 和 port. 例如:host myhost 表示捕捉带有主机地址 myhost 的包;net201.9.200 表示捕捉子网 201.8.200 内的包;port 表示捕捉端口号为 20 的包。 方向限制 指明何种方向的包被捕捉,方向包括 src,dst,src or dst 和 src and dst. 协议限定 指明捕捉何种协议的包。协议包括 ether,fddi, tcp,udp 等。 3.2 libnet:分组构造与输出 Libnet 函数库提供构造任意协议的分组并输出到网络中的接口。它以与实现无关的方 7
式提供原始套接口的访问方式和数据链路访问方式。 Libnet 隐藏了构造 IP、UDP、和 TCP 头部的许多细节,并提供简单便与移植的数据链 路和原始套接口的写出访问接口。与 Libcap 一样,Libnet 也由许多函数组成。我们将在下 面的例子中展示其中若干个函数的用法,并与直接使用套接口所需要的代码相比较。Libnet 的所有库函数均以 Libnet_前缀打头。Libnet 手册页面和在线手册详细讲解了这些函数。 Libne 函数函数库可以从 http://www.packetfactory.net/libnet/公开获取,在线手 册是 http://www.packetfactory.net/libnet/manual/。 3.3 程序设计 我们现在开发一个例子程序,它向一个名字服务器发送含有某个 DNS 查询的 UDP 数据 报,然后使用分组捕获函数读入应答。我们将自行构造 UDP 数据报(即 DNS 查询),并把它 写出到一个原始套借口。另一方面我们使用分组捕获机制获取含有名字服务器的应答的完整 UDP 数据报。因为校验和关系到所有数据的安全性所以我们还检查所获取 udp 头部的校验和 字段,如果其值为 0,那么名字服务器没有开启 udp 校验。我们这样做的目的是更加详细的 理解网络数据报的内部结构。(如今大多数系统却省就开启校验和,不过较老的系统却省禁 止校验和,当今所以的系统都应该总是开启 UDP 校验和,否则受损的数据报有可能破坏服务 器的数据库。) 8
分享到:
收藏