《linux C下网络数据包的获取与分析.docx》由会员分享,可在线阅读,更多相关《linux C下网络数据包的获取与分析.docx(36页珍藏版)》请在三一办公上搜索。
1、linux C下网络数据包的获取与分析摘要随着因特网技术的发展,网络通信问题日益成为人们关注的焦点,网络数据包分析 程序便是一种分析网络状况的有效方法,它从数据包流量分析角度出发,通过实时地收 集和监视网络数据包信息并对数据包进行分析,来检查网络数据传输的状态,从而监控 网络环境。当前,网络在人们生活中发挥着越来越大的作用,人们也对网络有了越来越 高的需求,要适应时代的需要,提供完善便利的网络服务,进行对网络数据包的分析课 题研究很有必要。分析网络流量,开展对网络数据包的监测活动,对网络的发展都具有极 其重要的意义。基于linux环境下使用C语言实现的对数据包的获取与分析,程序运用链表结 构来
2、存储符合条件的数据包,实现了对数据包的来源、类型、端口及长度的分析。网络 数据包流量分析程序的功能实现,有助于我们对网络的数据传递以及数据包类型进行掌 握,便于对发生或即将发生的网络问题进行提前防范。关键词:linux/C语言/网络数据包ACQUISITION AND ANALYSIS OF NETWORKPACKETS BASED ON THE LINUX CABSTRACTAlong with the development of Internet technology, network communication issue has become the focus of attenti
3、on, network packet analysis program is a kind of effective method of network status analysis, it from the packet flow analysis Angle, through the real-time collection and surveillance network packets of data packets of information and analysis, to check the state of the network data transmission, an
4、d monitoring network environment. At present, the network of people living is playing the more and more major role, people also have more and more to network high demand, to adapt to the needs of the time, perfect service network of convenience, the network packet analysis subject research is necess
5、ary. The network traffic analysis, research on network packets monitoring activities, to the development of the network has very important significance.Based on Linux environment using C language realization of packets of obtaining and analysis, and the program using the list of the structure to sto
6、re meet the conditions of the packet, realize the source of data packets, the type, the port and length of the analysis. Network packets flow analysis the realization of the function of the program, and it can help us to the network data transmission and packet types master and is convenient to happ
7、en, or the upcoming network problems of prevention.Keywords: Linux/C/network packets摘要IABSTRACTII1. 绪论11.1研究的目的和意义11.2开发工具及环境简介12. 系统分析42.1需求分析42.2可行性分析52.3 IP协议分析62.4数据包流量分析83. 系统总体设计103.1开发设计思想103.2系统设计103.3程序结构设计103.4程序功能设计113.5系统设计中的重点及难点144. 系统详细设计与实施164.1 Linux 下 socket 服务的初始化164.2存储功能设计与实现164
8、.3 Socket 句柄赋值功能的实现174.4程序实现所需重要函数174.5 socket 介绍194.5.1创建原始套接字204.5.2设置套接字选项204.5.3创建并填充相应协议头214.5.4数据包发送接受功能的实现234.6其他设计235.系统测试255.1测试方法255.2运行命令及运行结果25结束语30参考文献31致 谢321.绪论1.1研究的目的和意义Internet的迅速发展使社会经济结构和人们的生活方式发生了巨大的变化,而网 络数据包是网络管理的重要数据基础,通过数据包分析流量数据,可以帮助网络管 理员发现各种恶意网络攻击,对攻击源进行追溯和定位,从而对网络中的计算机进
9、行有效的保护。异常数据包是指能对网络的正常运行造成危害的数据包,异常数据包 可能会导致网络拥塞。通过对数据包流量进行检测和分析,把网络数据包解码、分类 和统计后,对危害网络正常流通的数据包进行限制和阻隔,更有效地保护关键应用的 数据,使网络变得更加畅通。尤其是在宏观发现网络异常的同时,如何迅速有效地分离 和抑制非正常数据的入侵,对非法业务实行遏止,使其整个网络能保持其健壮性,就成 为我们迫切想要解决的问题。现在很多软件针对网络流量的监控,大多属于企业级 使用范围,而针对于普通中小网络来说,虽然有杀毒软件和防火墙,但却不知道一 些恶意程序也可以悄悄的在后台运行,可以神不知鬼不觉的连接网络,来窃取
10、用户 的信息和隐私,比如说:木马程序就可以通过修改数据包的信息来进行信息的盗取。 而这是广大网络管理人员不愿意看到的情况,本设计通过对网络数据包的捕获与分 析可以获取与本机进行数据交换的数据包的内容,进而做出合理的选择保护网络。在中小网络中网络安全起着至关重要的作用,数据的出入是不允许出现任何闪 失的。网络管理人员在做好防护的同时也要对数据包进行捕获和分析。因为网络上 的数据信息是通过计算机的网卡转换把网上的信息呈现在我们眼前的,通过对流经 网卡的数据包的分析,如果发现有恶意连接或是异常数据包的时候,网络管理员就 可以及时的做出相应的措施来保护网络的通畅和安全,这也就是进行网络数据包分 析的重
11、要意义所在。1.2开发工具及环境简介本设计采用的程序设计语言为C语言。C语言是一种面向过程的计算机程 序设计语言,它是目前众多计算机语言中举世公认的优秀的结构程序设计语言之一 。同时C语言又是一种通用的程序设计语言,在国际上广泛流行。世界上很多著 名的计算公司都成功的开发了不同版本的C语言,很多优秀的应用程序也都使用C 语言开发的,它是一种很有发展前途的高级程序设计语言。C语言的特点:1 - C是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合 起来。C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机 最基本的工作单元。2. C是结构式语言。结构式语言的显著特点是代
12、码及数据的分隔化,即程序的 各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便 于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调 用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。3. C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序 效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。4. C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等 等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型 应用软件也是用C语言编写的。开发环境为l
13、inux:Linux操作系统的诞生1981年IBM公司推出享誉全球的微型计算机IBM PC。在1981-1991年间,MS-DOS操作系统一直是微型计算机上操作系统的主宰。 此时计算机硬件价格虽然逐年下降,但软件价格仍然是居高不下。Linux是一套 Unix-like的操作系统,是 Unix的一种,它控制整个系统基本服务的核心程序 (kernel)是由Linus带头开发出来的,Linux这个名称便是以Linuss unix来命名, Linus选择用大众公有版权(GPL)的方式来发行这份程序,这个版权允许任何人以 任何形式复制与散布Linux的原始程序,换句话说,Linux实际上是免费的,使用
14、者在网络上就可以抓到Linux的原始程序代码,随心所欲的复制与更改Linux的 原始程序,在因特网的日渐盛行以及Linux开放自由的版权之下,吸引了无数计算 机高于投入开发、改善Linux的核心程序,使得Linux的功能日见强大,所以今 日我们可以在网络上免费下载 Linux使用,或者花很少的一点费用就可以取得 Linux光盘,这都是因为Linux是GPL版权的缘故。除了核心程序以外,一个操作系统还需要其它的系统程序跟应用程序才有实用 性,Linux系统中常用的系统程序大部份是美国自由软件基金会 (Free Software Foundation)开发出来的软件,而且也有不少机构或个人为Lin
15、ux开发应用程序, 这些程序一样大多都是自由软件,任何人都可以免费的在网络上取得,不过自行去 取得这些程序再一一安装非常不便,于是有些公司或团体就会去搜集、整合Linux 上的程序,把核心-系统程序-应用程序总合起来构成一个完整的操作系统,让一般 使用者可以简便的安装完整个系统,这就是所谓的安装软件包(distribution),我们一 般讲的Linux系统便是针对这些安装软件包而言,同样是Linux系统,却分成不 同公司、机构整合出来的不同安装软件包,这就是大家常常在网络上看到Linux有 那么多种的原因Linux具有Unix系统的程序接口跟操作方式,也继承了 Unix稳 定有效率的特点。网
16、络上安装Linux的主机连续运做一年以上而不曾当机、不必关 机是稀松平常的事,不过Linux却不象一般Unix要负担庞大的版权费用,也不需 要在专属的昂贵硬件上才可以使用;Linux可以在一般的i386 PC上执行,效能又 高,自然而然的接收了过去几十年来在 Unix上累积的程序资源跟使用者,加上 GPL的版权允许大家自由散布Linux的原始码,并针对自己的需求修改程序,使 得Linux在目前已经成为非常受人欢迎的一个多人多任务、免费、稳定、效率高, 可以在包括i386、Sparc、Alpha、Mips、PPC等众多不同计算机系统平台上执行的 操作系统。Linux支持多种硬件装置,诸如x86、
17、Sparc、Mips、Motorola PowerPC 和ARM等等。由于程序代码公开,硬件厂商无须多付额外的版权费用,便得以替 自行生产的硬件装置开发适用于Linux的驱动程序,提高产品销售率。最为人称道 的,是Linux的网络能力,不论是SLIP、PPP、NetBEUI、DDP还是ISDN等等, Linux都有相应的软件供应;而稳定的服务器功能,适用于架设Intranet和Internet。 一般用户受益于GNU GPL和LGPL的保护,可以不同的管道取得完整的Linux,故 而Linux可以是免费的。相对于Unix昂贵的版权费用,Linux称得上是物美价廉。除此以外,Linux还具有如下
18、的特色:1、具备多人多任务:这表示Linux可以 在同一段时间内服务许多人各别的需求。2、支持多CPU :这绝对不是NT的专利, Linux也支持这种硬件架构,代表着更快速的运算和革命性的算法即将成为时代的 主流。支持多种档案系统:如Minix、Xenix、System V等等著名的操作系统。将来 NT的NTFS也会列入支持的。看得见DOS :这是所谓的透明化(transparency); 把DOS的FAT档案系统视为特殊的远程档案系统,不需任何特别的指令便可以灵 活运用,就如同一个在Linux底下存在的目录一样。近几年的发展,已使得Linux成为微软、升阳的另一大敌手。Linux挟其价格 低
19、廉、品质良好与稳定的竞争优势,正无形无影地扩散至众多以PC为主的工作平 台上。早期因缺乏商业性应用软件,单凭学术味道浓厚的工具程序,是无法打入一 般商家的主流操作系统的。然而,今日的Linux已非吴下阿蒙,KDE、Gimp、Gnome 等计划相继地开展,为X提供了更多图形接口的桌面操作环境和应用软件。约1993 年左右,Linux首先以发行软体的型态出现。这是一群完整的软件,包含安装程序、 核心、应用软件、X、驱动程序等的软件包,经由Internet下载至磁盘片进行安装。 那时的安装程序简陋,难以成功地安装妥当,接口亲和力不足和硬件支持不良是最 大的障碍。后来出现了光驱,光盘片的传播媒体也应运
20、而生,现今Linux厂商所制 作的发行软件也都是以此为主要的发行媒介。国内常见的有Red Hat、Slackware和 Debian这三种。其中以Debian算是至今仍维持非商业型态的重量级发行软件了, FSF曾经以基金援助过其初阶段的发展。任何人都可以从Debian的FTP站上下载 整套的发行软件。对国内用户而言,最关切的莫过于Linux中文技术的发展情况了。 X窗口系统已有稳定的中文版问世,各种中文输入法和中文仿真窗口也已进入成熟 的阶段,相信未来会朝向应用软件中文化的层面发展,使X的操作环境符合国内用 户的需求。Linux的发展证实了信息会愈来愈便宜的趋势;因为便宜,市场便无限 扩张。大
21、力发展linux软件事业,有助于我国自主软件的开发,保护国家信息安全,并且 在国际竞争中赢得一点份额。2. 系统分析2.1需求分析在程序开发之前,设计人员要对系统进行需求分析,要认真了解网络管理员的 要求,细致地进行调查分析,深入描述程序的功能和性能。需求分析是奠定程序开 发的基础,也是起决定性的一步。如今网络发展日新月异,大量的中小网络层出不 穷,伴随而来的也有网络数据流量压力对网络的冲击。因此,基于网络数据包分析 的研究就显得十分必要,这样网络管理员就能更加直观的来了解网络实时的通信情 况,有利于网络的管理。网络数据包分析能够帮助网络管理人员更好的了解所管理的网络,流量分析技 术能够帮助网
22、络管理人员提高解决问题的效率,解决问题的快慢关键在于如何快速 分析问题发生的原因,一个高级的管理人员必须懂得有效的利用各种分析工具和手 段来提高问题分析的效率,而对网络数据包的分析是最为有效的手段之一。系统开发的目标即采用捕获一段时间内以本机为源地址或目的地址IP数据包 的方法,具体的数据包如TCP数据包,UDP数据包,IGMP数据包,ICMP数据包 等,以此来统计IP数据包的信息。针对于IP包的分析可以得到以下内容:本地IP 地址及与本机发生数据通信的IP地址,交换的数据包数量、数目,IP包的版本和 生存时间等。通过对这些内容的分析,网络管理员就可以了解计算机通信的情况, 从而做出应对措施。
23、2.2可行性分析在系统调查的基础上,针对本设计的开发具有可操作性,对其进行从经济、技 术、社会三方面进行分析和研究。可行性研究的目的就是用最小的代价在尽可能短 的时间内确定问题是否能够解决。该程序的可行性分析包括以下几个方面的内容。1. 经济可行性网络数据包分析程序开发成本较小,硬件则仅需要一台计算机来进行开发,软 件方面需要在PC机上安装linux操作系统即可,而linux操作系统可以免费从网上 获得。此外,程序不仅开发成本小,维护成本也不多,并且易于维护,非常适用于 中小网络管理员的使用。2. 技术可行性通过分析、开发语言和开发技术的各种优势和特点,对此系统的开发和实现提 供了坚实的基础,
24、运用linux+C的结构思想和框架,让此系统的开发和实现创造了 前提基础,以便系统正常的开发。3. 社会可行性数据包分析程序的实现将会给公司、企业等中小网络管理人员带来十分强大的 助力,它所实现的对于网络数据包相关流量分析的功能对于网络的管理、优化起到 至关重要的作用,社会影响力颇为显著。网络数据包分析程序强大功能的实现将会 使它成为网络流量分析软件的模范,将会被大量中小网络管理人员竞相使用。2.3 IP协议分析IP数据包分析程序在运行过程中捕获的IP数据包主要包括TCP数据包,UDP 数据包,IGMP数据包,ICMP数据包等,这些数据包分属于不同的TCP/IP协议。 IP协议是TCP/IP
25、一系列协议的核心,主要能负责IP分组的传输。IP提供不可靠的, 无连接的,尽最大努力交付的分组传输机制。“不可靠的”含义是指它不能保证IP 分组成功的传送到达目的站。“无连接的”含义是指IP并不维护后续分组的状态信 息,每个分组的处理都是相互独立的。最后,IP提供的是“尽最大努力交付”的服 务指尽力发送每个数据包,并不随意丢弃分组。下面就IP包的具体协议及报文结构 类型进行相关介绍分析。1. UDP是一个非常简单的协议,除了运输层协议能够做的最少的工作,除了提 供进程到进程之间的通信,几乎没对IP增加任何东西。数据报的长度是指包括报头 和数据部分在内的总字节数。因为报头的长度是固定的,所以该域
26、主要被用来计算 可变长度的数据部分。数据报的最大长度根据操作环境的不同而各异。特点如下:(1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送 时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等, 因此一台服务机可同时向多个客户机传输相同的消息。(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的 额外开销很小。(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、 源地址端口和目的地址端口主机性能的限制。(5) UDP使用尽最大努力交付
27、,即不保证可靠交付,因此主机不需要维持复杂的 链接状态表(这里面有许多参数)。UDP是面向报文的。发送方的UDP对应用程序 交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留 这些报文的边界,因此,应用程序需要选择合适的报文大小UDP数据包格式由于 部和数据两部分组成。如图2.1所示。首部8B数据源端口号 16bit目的端口号16bit总长度 16bit检验和 16bit图2.1 UDP数据报格式2.传输控制协议(TCP,Transmission Control Protocol)就是为了在不可靠的互联 网上提供一个可靠的端到端、面向字节流连接设计的。它提供了面向连接的
28、服务、 全双工服务和字节流传递服务曲。应用层向TCP层发送用于网间传输的、用8位字 节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连 接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP 层,由它来通过网络将包传送给接收端实体的TCP层。TCP和UDP都具有端口号, 而且它们对端口号的使用是彼此独立的。这就是说,同一个端口号可以用两种不同 的用途。其中TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他 是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。TCP报文是TCP 层传输的数据单元,也称为报文段。如图2.2所示。确认
29、号32bit首部长度4bit保 留6 bitURGACKPSHRSTSYNF 窗口大小16bitIN校验和16bit紧急指针16bit选项和填充图2.2 TCP报文段格式2.4数据包流量分析作为一个高级的网络管理员,要管好一个承载关键业务的网络系统,首先要对 自己所管理的网络建立深入的了解,提高自身的网络管理技术水平,而掌握高级的 数据包流量分析技术并在工作中有效的应用,将对网络管理工作带来非常大的帮助。管理好一个网络最重要的就是对网络的了解,对数据包流量分析能使网络管理 人员更深入地了解网络。1. 每个网络都有自身的运行规律,这和网络的结构、应用特点等紧密相关,通 过ip流量分析,能够了解网
30、络系统运行的规律。网络上重要的应用在运行时,每一 个访问,每一个交易处理,数据都由网络来传输,通过分析应用的流量,能够清楚 的了解应用运行的规律,数据包内容、数据包处理数量、响应时间等数据,都可以 通过数据包流量分析手段获取。每个用户的网络行为都是相互影响的,同时会对网 络的运行产生影响,伴随着每个用户在网络中的行为都有网络流量的产生,通过对 网络用户的网络数据包进行分析,能够直观地了解网络用户的网络行为。2. 网络异常的发现是建立在对网络了解的基础之上的,如果能做到及时地发现 网络中的异常,将使网络管理更主动,将为网络的持续高性能运行提供重要的保障 岳通过数据包流量分析就可以很轻松的知晓网络
31、存在的异常。网络中流量的异常, 包括利用率、数据包数的异常、连接数量、应用流量的异常,都可以通过长期主动 数据包流量分析来及时发现。异常的网络行为也都有明显的流量特征,如感染了蠕 虫病毒、安装了后门程序等,长期的流量分析能及时的发现网络中这些异常行为, 有利于网络管理人员做出正确的应对措施。流量分析可以为网络和应用问题的分析提供依据,特别是数据包级的分析,因 为这些依据是真实的,它们是实实在在的在网络中传输的数据包,这也是流量分析 能够大大提高网络和应用问题分析效率的原因。数据包流量分析是有助于维护网络 持续、高效和安全运行的一种手段,数据包流量分析有助于网络管理员对网络运行 管理、应用运行管
32、理和网络应用问题分析。3. 系统总体设计3.1开发设计思想程序开发设计思想有以下几点:1. 尽量采用现有的软硬件环境及先进的开发技术,从而达到充分利用现有资 源,提高程序开发水平和应用效果的目的。2. 程序应符合网络管理员使用习惯的要求,满足他们工作的需要,并达到操 作过程中的直观、实用、方便、安全等要求。3. 系统采用模块化程序设计方法,既便于程序功能的各种组合和修改,又便 于未参与开发的技术人员对其功能的补充。3.2系统设计在通常情况下,网络通信的套接字程序只能响应与自己硬件地址相匹配的或 是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达网络接口但却不 是发给此地址的数据帧,网络接
33、口在验证投递地址并非是自身地址之后将不引起 响应,也就是说应用程序无法收取与自己无关的的数据包。所以我们要想截获流 经网络设备的所有数据包,就要采取一点特别的手段了:将网卡设置为混杂模式。 这样,该主机的网卡就可以捕获到所有流经其网卡的数据包和帧。但是要注意一 点,这种截获仅仅是数据包的一份拷贝,而不能对其进行截断。首先初始化环境,再创建原始socket将其初始化;然后获得本地地址,把原 始socket绑定到本地网卡,最后监听网卡捕获数据包,把捕获到的包加入链表, 在达到预定时间时退出监听并输出统计信息。3.3程序结构设计在main方法中首先进行初始化配置,判断参数格式是否合乎要求,然后进 行
34、设备信息配置、信号量设置以及判断超时设置等。如果满足要求则进行原始套接字和获取本机IP等操作为程序能够读取网卡 接收的信息做准备,最后要把网卡设置为混杂模式以便使网卡能够接收进入所有 经过此网卡的数据包。混杂模式(Promiscuous Mode)是指一台机器能够接收所 有经过它的数据流,而不论其目的地址是否是它。这被网络管理员使用来诊断网 络问题,但是也被无认证的想偷听网络通信(其可能包括密码和其它敏感的信息) 的人利用。混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包。 默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一 律丢弃。简单的讲,混杂模式就是指网卡能
35、接受所有通过它的数据流,不管是什 么格式,什么地址的。具体的地址转发则是在接受到数据后由MAC层来进行。在程序执行过程中时刻监视系统时间以便来确定是否超时,然后根据数据包 的五元组信息利用hash算法取得与五元组相对应的数值,将其放在hash表中作 为搜索值。将捕捉到的数据包的头文件的内容加入链表中,同时写入文件,此链 表再追加的时候可以自行作出判断,如果之前捕捉到的相同源目的地址和协议类 型的数据包则不添加新的结点而是把原来的计数器加一,在定时器计时时间到 时,进行超时比较,将超时的数据包丢弃。1. 链表结构设计链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺 序是通过链表
36、中的指针链接次序实现的。链表由一系列结点(链表中每一个元 素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个 是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表存储的 特点是用一组任意的存储单元存储数据元素(这组存储单元可以是连续的,也可 以是不连续的)。因此,为了表示每个数据元素与其直接后继数据元素之间的逻 辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直 接后继的信息相比于线性表顺序结构,链表比较方便插入和删除操作。2. 数据包信息统计模块设计输出统计的IP数据包信息,列出源地址、目的地址、协议号、源端口号、 目的端口号、数据包的长度
37、以及获取数据包的时刻等信息。经这些数据包的信息 存放到文件中。3.4程序功能设计程序功能设计采取模块化设计的方法,在上一节介绍了链表的结构化设计, 至于存储的细节在这就不做过多的叙述。本设计重点的任务就是对本地计算机进行监控,把网卡设置为混杂模式以此 来捕获流经网卡的全部数据包信息,加上一些辅助的本地信息查询,显示得到当 前计算机的基本信息,达到功能简洁方便,消耗资源少而又不影响其他程序运行 的需求。在我们的个人计算机上,网卡是比较容易被忽略的,它是个人用户与互 联网连接的关键所在,而且它也有流量的出入,因为网络上的信息流量是通过计 算机的网卡转换把网上的信息呈现在我们眼前。我们往往都是关注网
38、络流量,但 是网卡同样要引起网络管理人员的重视。小事物往往有着大作用,通过对网卡流 量的监测与分析,比如说:普通用户的下载速率肯定是比上传速率大很多,当恶 意程序连接网络时,上传速率却大大大超过下载的速率,此时网络管理人员就该 注意是否存在不正常的网络连接。通过对数据包的捕获,我们可以得到如下信息:源地址、目的地址、IP包 版本、源端口号、目的端口号及生存时间、数据包类型及长度等。对于网络管理 人员来说,从这些信息中就可以了解到与本机发生数据交换的计算机相关信息, 知晓当地网络通信的实时状况。面对如此多的数据报信息,如果是一位有足够网 络经验的管理人员,就可以从细枝末节处察觉出是否存在潜在的网
39、络问题,这对 于网络的通畅和安全是非常重要的。来自网络的安全威胁是实际存在的,特别是 在网络上运行关键业务时,网络安全是首先要解决的问题,为此,对网络数据包 流量分析就要深入了解。对于数据包捕获的过程如图3.1所示。图3.1数据包的捕获通过对数据包的分析,我们可以从中得知IP数据包捕获的相关信息,包括 捕获时间、IP地址信息、协议类型及数据包相关信息。这些信息是我们进行数 据包分析所必需的,在了解了这些信息后,就可以从容的面对网络实际运行状况。程序的执行首先要进行sockt的初始化,初始化后,必须建立一个SOCKET 结构来保存SOCKET句柄,设置网卡混杂模式进行数据包接受并输出显示内容。
40、程序运行结构简图如图3.2所示。Linux网络数据包的获取图3.2程序结构简图3.5系统设计中的重点及难点重点是要掌握网络传输的原理和方式,比较困难的地方是关于如何捕捉数据 包,如何分析头文件的信息获取数据传输的方式和源地址目标地址等信息,以及 通过建立链表存储并且统计数据包信息以及数据包信息的存放。具体问题及措施 如下:1. 获取数据包的包解决办法:linux系统提供了专门的数据包获取的的函数库(libpcap库), 想要获取网络数据包,我们可以安装libpcap库即可在函数中通过调用libpcap 库函数来获取,但前提是:你的系统必须安装了 libpcap库。2. 捕捉数据包及分析解决办法
41、:在主函数的循环获取数据包的结构中调用libpcap库中 pcap_loop函数,其函数调用结构如下:pcap_loop(descr,pack_num,my_callback,NULL);该函数作用是将函数没获取一个数据包就开始调用函数my_callback,其函 数调用格式如下:void my_callback(u_char *useless,const struct pcap_pkthdr * pkthdr,const u_char* packet)该函数对数据包进行分析,将分析后的数据包信息再通过调用函数分别进行 存入hash表和文件等操作。3. 数据包捕捉的结束解决办法:扑捉数据包的结
42、束可以有多种途径使其函数结束跳出,例如:设 定参数来指定要捕获的数据包的个数,利用while循环语句来判定,也可以使用 对信号的捕捉来判断函数的结束。在该程序中作者使用的是在程序运行的过程中 不断来检测并获取终端输入的信号,对信号进行判断,来做出是否结束的操作, 如果是捕获到终端的Ctrl+c信号,则程序的地洞终止运行并结束程序。4. 数据包信息的存放解决办法:linux系统的一切操作都可以归根于文件的操作,但是文件的操 作也离不开结构体,因此对于数据包的信息都是存放在结构体中,按照数据包的 五元组信息、通过hash算法,来获取hash值,并将数据包的信息存放在与hash 值相对应的hash链
43、表中,最后经过判断后再将数据信息存放在文件中,作为记录, 通过对文件的打开、读写和关闭等的操作,这样便于以后对数据包信息的调用和 读取与分析。4. 系统详细设计与实施4.1 Linux下socket服务的初始化Linux下的socket服务提供了用户端和服务器端两部分。但是无论是客户端 或者是服务器端都是采用了 “open-write/read-close ”的模式实现socket的,根 据这个模式,socket就提供了相对应的对接口进行操作的函数,用来对socket的 初始化操作。要使用linux下的socket套接字进行通信需要首先调用sockaddr_in 结构体,该结构体的结构如下:s
44、truct sockaddr_in short int sin_family;/* Address family */* Port number */unsigned short int sin_port;struct in_addr sin_addr;/* Internet address */unsigned char sin_zero8;/* Same size as struct sockaddr */;利用该结构体可以对服务器端或者是用户端的ip地址和端口进行绑定初始 化,还可以定义服务器端允许各种用户的连接等等。然后通过socket库函数进行 对socket通信进行初始化。4.2存
45、储功能设计与实现线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据 元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个 数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其 本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位 置)。由这两部分信息组成一个结点,表示线性表中一个数据元素。下面要做 的便是把捕获的符合要求的网络数据包的信息插入链表。在该程序中采用了 hash 链表的存储形式,根据数据包的五元组信息计算出与之相应的hash值,作为遍 历时使用。然后将与hash值相对应的数据包信息都存放在相对应的以hash值为 首的
46、hash链表中。当来一个数据包在获取数据包的信息后,再插入hash链表时 有几种情况:1. 如果在hash表中没有遍历到通过hash算法得到的hash值,则将该值放在 一个新的数组空间,然后将首个IP包插入链表头,表头指针后移,表尾指针置空, 则让那个结点的记数累加。2. 如果遍历到所对应的hash值,则从第一个数据包开始扫描,指针循环,当 指针到达链表末尾时,插入新的IP包,链表末尾的next指针置NULL,则让那个结 点的记数累加。4.3 Socket句柄赋值功能的实现创建一个与指定传送服务提供者捆绑的套接口,可选地创建或加入一个套接 口组。此函数为socket()的扩展版本,其功能都是创
47、建一个原始套接字。使用 时需要包含sys/socket.h头文件。为了使用socket()函数创建的Socket,还需要将这个Socket 与 sockaddr绑定。实际上,bind()函数采用struct sockaddr是为了考虑兼容性,最终struct sockaddr 和struct sockaddr_in的内存占用是等同的。4.4程序实现所需重要函数1. pcap_loop(descr,pack_num,my_callback,NULL)Pcap_loop函数是libpcap库的重要函数,它主要是将从接口处获取的网络数 据包传递给函数my_callback这个回调函数,使用这个函数进
48、行对所获取的数据 包进行分析和处理,从而获取数据包的五元组信息以及其他相关的信息。而对于 回调函数my_callback来说,它有固定的参数形式,如下:void my_callback(u_char *useless,const struct pcap_pkthdr * pkthdr,const u_char* packet)通过调用回调函数来调用457 -struct in_addr addr;458 -struct iphdr *ipptr;459 -struct tcphdr *tcpptr;460 -struct udphdr *udpptr;这几个对数据包进行处理的结构体来对网络数据包进行分析,从而获取数据 包的五元组信息以及其他相关的信息。2. pcap_lookupnet()#include int pcap_lookupnet(