第二章综述数据包捕获与分析的相关技术,介绍了数据包捕获原理、Netfilter概述、工作原理和特点,深入了解了基于Netfilter的网络捕获机制及Netfilter框架。
第三章介绍了基于Netfilter的网络数据包捕获与分析,探讨了Linux内核态与用户态之间的进程通信以及对本课题的程序进行了系统测试及各个模块的实现进行介绍。
第四章对本课题进行了总结和进一步的发展展望。
2 数据包捕获与分析的相关技术
2.1 数据包捕获相关知识
2.1.1 数据包捕获概述
计算机网络在传输数据时,为了保证所有共享网络资源的计算机都能迅速、公平地使用网络,通常把数据分割成若干小块作为传输单位进行发送,这样的传输单位叫做“数据包”。目前有两种方法可以从网络中捕获数据包,一种是采用专用硬件,另一种是利用普通计算机与网络连接的通用硬件——网络适配器,即网卡,由软件来完成数据包的捕获。虽然由软件来捕获数据包的方法在性能上不比专用硬件,但它的实现成本相对低,且易于修改和更新。
计算机网络从传输方式的角度分为两类:一是点对点连接的网络,二是广播方式的网络。广域网中一般采用点对点连接方式,而几乎所有的局域网都以广播方式作为通信的基础,网上的站点共享信道,一个站点发出的数据包,其他的站点都能收到,也就是说,任何一台计算机都可以接收到网络中同一个共享域的所有数据通讯。
2.1.2 数据包捕获原理
数据获取主要有两种方法:通过数据链路层获取和通过网络层获取。在TCP/IP的体系结构中,数据链路层和物理层共同构成网络接口层,作为TCP/IP的第一层,在这一层的数据格式是以太帧。通过网络层获取数据主要借助原始套接字。套接字是网络应用编程接口。套接字有三类:流式套接字、数据报套接字和原始套接字。前两种套接字只能访问到传输层,而原始套接字可以获取ICMP、TCP、UDP等数据包。
由于目前用的最多的网络形式是以太网,在以太网上,所有的主机都共享一条网络总线,这意着所有主机都可以“听到”总线上的通信数据。数据是以被称为帧的数据结构为单位进行交换的,而帧(数据包)是用被称为带碰撞检测的载波侦听多址访问即CSMA/CD(carrier sense multiple access with collision detection)的方式发送的,在这种方法中,发送到指定地址的帧实际上是发送到所有计算机的,只是如果网卡检测到经过的数据不是发往自身的,简单忽略过去而已。正是这种基于CSMA/CD的广播机制,这就给连接在网络上的计算机捕获来自于其他主机的数据带来了可能,即通过对网络接口的设置可以使网卡能够接收到所有经过该机器的数据,然后将这些数据做相应处理并实时分析这些数据的内容,进而分析网络当前状态和整体布局。这里,通过设置硬路由器的监听端口来捕获数据包的方式不再本文讨论范围内。
对于网卡来说一般有四种接收模式:
(1)广播方式 能够接收网络中的广播信息;
(2)组播方式 网卡能够接收组播数据;
(3)直接方式 只有目的网卡才能接收数据;
(4)混杂模式 能够接收一切通过它的数据,而不管该数据是不是传给它的。
网络数据包捕获(也称嗅探)程序一般采用第(4)种模式。另外,也可通过重新设置MAC地址或重新对网卡上的EPROM编程以修改MAC地址来窃听或捕获与其有相同地址网卡的数据。
每一个网络数据包都是基于某一个网络协议产生的,所以分析网络数据包必定要分析其协议的内容。由于网络数据通信是要在相互公开协议的前提下对等进行的,所以对数据包进行协议的分析在原理上是可行的。 基于Netfilter的网络数据包捕获与分析(3):http://www.751com.cn/jisuanji/lunwen_7270.html