数据包捕获

2024-10-23

数据包捕获(精选8篇)

数据包捕获 篇1

目前,网络安全问题变得越来越严重,对网络安全的研究也越来越重要。为了对网上的攻击进行有效的预防,需要捕获网络中的数据包,并分析其特征,以应用于网络测试、网络安全的监视、监测网络负载及有效预防网络攻击等。网络数据包捕获及分析系统是为了给企业提供一个更安全的网络环境而设计的。在局域网的服务器上装上系统后,可以简单、快捷的实现网络安全检测,实时报警。

一、 系统研究过程

1、 总体规划

根据系统需求确定系统的总体规划,因为此系统为网络数据包捕获及分析系统,系统主要是对网络上传输的数据包进行操作,主要包括数据包捕获,协议分析,数据存储,内容检索,实时响应等。根据系统需要完成的任务和角色划分系统用例图如图1所示。其中数据包捕获包括数据包的获取,存储,分类管理;协议分析包括对链路层协议、网络层协议、传输层协议和应用层协议分析;数据存储主要指的是文本内容存储;内容检索包括获取用户输入得敏感信息,数据库查询,返回查询结果;实时响应:包括报警,查找出敏感信息具体位置。

2、 设计流程

功能需求分析方面包括文本检索和及时响应,前者包括SMTP协议内容检索、FTP协议内容检索、HTTP协议内容检索,后者主要指的是由于硬件的限制,系统用弹出警告框来代替报警。在进行功能需求分析之后进行系统设计,本研究的总体设计流程如图2所示:

五个模块功能解析如下:

(1)网络数据包捕获模块:主要功能就是从以太网中捕获数据包。

(2)网络协议解析模块:网络协议解析模块对捕获到的数据包进行协议分析,检测出每个数据包的类型和特征。这是此系统的核心部分。

(3)存储模块:存储模块就是把协议分析后的结果存储起来,供事后分析。

(4)检测模块:检测模块就是根据规则来检测入侵特征。

(5)响应模块:响应模块是对检测的结果进行实时响应。

3、 系统总体结构图

根据系统的总体流程图,设计了系统的整体框架图,如图3所示。

4、处理流程设计

系统最终目的是为了让用户,输入自己认为敏感的信息来对应用层协议内容进行检索,如果发现敏感信息进行及时报警。此因下面给出了检索响应这两个模块的详细流程图,如图4所示:

二、 系统各功能模块的分析与设计

1、 数据包捕获模块

Libnids使用了Libpcap(数据包捕获开发包),所以它具有捕获数据包的功能,利用Libnids可以轻松的实现对数据包的捕获,并对其进行分析。因此该模块主要是利用Libpcap捕获数据包。在初始化完毕后,应用程序利用Libpcap的pcap_dispatch()或pcap_loop捕获数据链路层的数据包。

2、 协议分析模块

捕获数据包后,对所有数据包进行分析,从链路层开始分析,然后分析网络层,再分析传输层,最后分析应用层。系统主要是分析应用层协议中的HTTP协议、FTP协议和SMTP协议的内容,并且根据应用层协议的不同,把数据包保存到不同的文本文件中。该模块中利用Libnids提供的TCP数据流重组功能,非常方便的对基于TCP协议的应用层协议进行分析,对他们的操作过程以及传输的数据内容进行分析,获取敏感信息,如账号和密码等。

3、 存储模块

实现数据的存储,在协议分析模块中,已经根据应用层协议的类型把相关数据包保存到文本文件中,此模块就是实现把文本文件的内容保存到数据库中,以备响应模块查询用。

4、 检索模块

根据用户输入的敏感信息,对数据库的文本内容进行检索。该检索模块使用BMGJ算法进行文本内容的匹配。

5、 响应模块

根据用户输入的敏感信息,检索数据库,做出相应的响应。

6、 帮助模块

该模块主要以文档形式提供系统使用说明,应注意事项等。

三、 结束语

入侵检测作为一种积极主动地安全防护技术,受到人们的高度重视,迫切需要具有自主版权的入侵检测产品。网络数据包捕获及分析系统采用自顶向下的分析方法实现了网络安全检测,实时报警的目的,满足了在设计时网络安全管理者提出的内容检索,及时响应的要求。

参考文献

[1]刘文涛,网络安全开发包详解[M].北京:电子工业出版社,2005年1月.

[2]曹学武,易国良,六利军.基于协议分析的邮件安全监控系统实现[J].计算机工程,2005年1月.

[3]赵新辉,李祥.捕获网络数据包的方法[J].计算机应用技术,2004年8月.

数据包捕获 篇2

//定义IP地址结构struct IPADDRESS{unsigned short ip_a,ip_b,ip_c,ip_d;};//定义IP数据包头的结构struct IP_HEADER{unsigned short   ip_version,   /*IP的版本号 */  ip_hdr_len,   /*IP包头的长度*/  ip_tos, /*IP包的服务类型*/  ip_total_len,   /*IP包的总长度*/  ip_id, /*IP包的分段标识*/  ip_flags,     /*IP包的分段标志*/  ip_frag_offset,   /*IP包的分段偏移*/  ip_ttl, /*IP包的生存时间*/  ip_proto,     /*IP包的高层协议*/  ip_hdr_chksum;   /*IP包的校验和*/struct IPADDRESS   ip_src_addr,   /*IP包的源IP地址*/  ip_dest_addr;   /*IP包的目的IP地址*/}ipheader;//IP包的链表结构struct stru_ip_link{char rcv_ip_buf[MAX_IP_SIZE];struct stru_ip_link *next;};

然后是协议的定义(包含相应的头文件#include#include):

DWORD dwIoControlCode=SIO_RCVALL,   /*接收所有的IP包*/    dwProtocol=IPPROTO_IP;   /*协议类型为IP*/

然后是相应的捕获处理:

1.加载 Winsock;

2.创建一个接收原始IP包的socket连接;

3.绑定到一个接口;

4.进行WSAIoctl设置,接收所有的IP数据包,

在局域网进行IP包捕获的一种方法

参考代码:

if (WSAIoctl(s, dwIoControlCode, &optval, sizeof(optval),    NULL, 0, &dwBytesRet, NULL, NULL) == SOCKET_ERROR)...

5.接着设定一个线程进行捕获:

(1)创建一个接收IP包的链表头;

(2)设置一个标识,为真,则不断进行IP包的捕获;

(3)建立一个新的结点,将捕获的数据包加入到该结点;

(4)如果链表的长度达到指定的长度,创建一个线程对该链表的IP包进行解析;再设置一个在IP数据包链表不足给定的长度,而又中止IP捕获时,对链表的处理;

(5)为下一个IP包链表创建一个链表头。

SIP通信数据包捕获和研究 篇3

1.1数据包捕获的机制

数据包捕获就是对数据包的完整收集, 系统搜集某一网络设备所接收的数据包, 不论此数据包发送至哪个端口或地址。收集数据包以后, 再进行还原以及审计等处理, 发送到上一层进而对其实行应用处理。可以通过专用的数据采集卡对网络实行相应采集, 也可根据以太网卡的混杂模式通过其广播特性或者交换机监测口对数据报文进行监听。

数据包的捕获通常有3个阶段:首先, 设置网卡为“混杂”的工作模式;其次, 捕获链路层的数据帧;最后, 提取数据包的首部, 便于分析和处理。

1.2数据包捕获的意义

网络不仅仅为人们带来越来越多的方便与快捷, 也给人们带来诸如网络病毒、机密泄漏、黑客入侵等安全问题, 信息安全成为我们关注的一大焦点。数据包捕获是信息保护的一种重要方法, 因此对其技术的研究有着重要意义。

1.3特点

数据包捕获是关乎网络与财产安全的一项重要措施, 该技术有较高的要求, 因此有以下特点:1.响应快。对于许多安全应用, 在数据报文上需要很快的响应速度, 以便于迅速捕获以及即时反应, 同时不允许误判或丢包。2.适应能力强。数据包捕获针对流经此网络的所有数据报文, 其类型和源目的地址都不统一, 即数据包的种类繁多且来源复杂, 因此该技术对各种数据包应有较强的适应能力。3.直接由上层处理。数据包的处理能够不经操作系统协议栈, 直接通过上一层的应用实行处理。4.不需严格校验。大部分数据报的处理是通过应用程序操作的, 在该应用中能够实行部分校验;数据报在某些网卡中的硬件芯片上进行了固化的校验, 因此在捕获过程中可以略去一些严格校验。

二、SIP通信

2.1 SIP协议所支持的功能

SIP作为信令协议, 可提供多媒体通信的5项功能。

2.2 SIP网络系统

SIP协议的网络系统结构包括用户代理 (UA) 和网络服务器 (NS) 。应用代理是SIP的终端, 用于和用户之间的交互, 可发送呼叫请求和响应呼叫请求。

网络服务器主要解析地址以及定位用户, 分为3种:代理服务器, 用于路由选择, 将用户请求及响应发送至下一跳;重定向服务器, 用于地址解析, 类似于DNS, 把目的地址映射成为0个或者多个新地址;注册服务器, 接收来自终端的注册请求, 并记录其地址。因此, 基于SIP协议, 有直接呼叫、代理服务以及重定向服务等3种通信方式。

2.3 SIP协议的特点

SIP协议参照了其它的Internet标准, 有其简练、兼容以及可扩展的作风。SIP协议是基于文本, 其词法、语法都较为简单;SIP在会话请求时, 同时实行媒体协商, 因此建立呼叫所需时间大大缩短;SIP只要对头域做简单地扩展便可进行补充、智能等业务;SIP协议能够分布式多播。

三、SIP通信数据包捕获

数据包的捕获系统包含硬件与软件, 硬件主要是对数据包进行捕获以及过滤, 软件主要对数据包进行分析与处理。因此捕获系统需满足实时、灵活、扩展方便和数据包无遗漏等性能。

3.1 SIP通信捕获思想

SIP通信捕获包含通信消息及其媒体数据2个部分的捕获。通信消息的捕获能够获得呼叫方和被呼叫方的通信状态——通信步骤与通信状态, 通信媒体参数的信息;依据通信的状态判断获取数据的开始或停止, 依据参数信息筛选及还原双方数据。

1.捕获流程

一个完整SIP通信应包含的消息有INVITE, 180Ringing, 200OK, ACK, BYE, 200OK等, 双方的媒体参数信息能够在INVITE及其响应的200OK获得, 由此可设计以下捕获流程:INVITE消息获取, 从SDP的o字段获取源IP地址, 并将该SDP部分的媒体参数作为邀请端 (A) 的媒体信息;从INVITE的起始行获得被邀请端 (B) 的IP地址。等待180Ringing, 若B至A的180Ringing消息得以捕获, 系统会将该信息显现出。等待200OK响应消息的捕获, 若判断为B到A的INVITE响应, 将该SDP的通信媒体信息获取并作为B的媒体信息。等待A至B的ACK消息的捕获。ACK不经过代理、重定向服务器, 而是直接通过双方接收、发送, 因此能够通过ACK的源地址和目的地址判断会话双方是即将通信双方与否。根据ACK确定双方IP地址, 捕获双向数据, 同时筛选、还原双方通信媒体信息。BYE消息捕获, 一方发送至另一方时便停止捕获。200OK响应消息捕获, 判断为BYE的响应消息时终止通信。

2.捕获改进

上述流程是必备的, 因SIP的复杂性, 数据包捕获可能出现乱序, 所以需做改进:

SIP通信除了上述消息外, 还有其他请求、响应消息, 某会话的其他SIP消息, 可选用的处理方式为收到便显示。

因网络上的数据有着庞大的传输量, 需要建立合理、有效的筛选机制, 可依据IP地址对双方信令、数据进行筛选。

因数据在网络上传输不稳定, 捕获完整SIP通信较为困难, 所以可将捕获流程缩减为4步:处理INVITE消息;处理对INVITE响应的200OK消息;依据媒体参数信息, 对数据捕获、还原与确认;依据BYE或对BYE响应200OK消息终止。

3.2媒体数据还原

SIP通信通过RTP数据包进行媒体数据传输, 还原方案是基于RTP协议展开的。对实时通信与离线数据设计以下两种不同方案:

1.实时通信的还原。

根据请求消息进行分析, 获得媒体的源地址、目的地址和载荷、端口等信息, 然后经过滤器对数据实行捕捉。具体步骤如图1所示。将通信信令捕获, 同时对相关数据流的信息进行记录;依据发送、接收双方的通信信令对RTP数据包进行捕获;判断捕获是否结束, 可根据SIP通信中BYE或对BYE响应的200OK确认停止;重组RTP数据, 同时解压缩以获取原始数据。

2.离线数据的还原。

首先储存捕获到的所有数据包, 进而还原数据流, 再通过流信息获取媒体的参数信息, 后通过此信息将原始数据还原。具体流程如图2所示。打开网卡, 将IP数据包完整捕获并储存;依据RTP流判别的原则, 在上述所储存的数据中将所有的RTP流信息提取出来;根据RTP包中Sequence Number字段, 重组并还原RTP数据;依照双方IP地址获得通信消息, 并得知其编码信息, 若流的信令不全, 可以用RTP默认类型的方式进行处理;最后解压缩获取原始的数据。

四、总结与展望

数据包捕获是对数据包的完整收集, SIP是不断完善且应用广泛的信令协议, SIP通信的数据包捕获是双方通信信息的获取, 基于SIP协议做了数据包捕获及还原的流程设计, 在今后的工作中, 应不断改进与完善此机制, 使捕获能够更加清晰、有条理。

参考文献

[1]钟诚, 等.SIP通信数据包捕获与分析[J].电脑知识与技术, 2010, 6 (34) :9739-9740, 9743

浅谈以太网的数据包捕获技术 篇4

数据包捕获技术在数据安全方面做出了很大的贡献, 而且它的优劣直接影响到捕获的准确性和整个网络监控系统的性能。本文将对这项技术进行分析。

1 网络数据包捕获原理

以太网以其高度灵活, 相对简单, 易于实现的特点, 成为当今最重要的一种局域网组网技术。在以太网上, 数据是以被称为帧的数据结构为单位进行交换的, 而帧是用被称为带冲突检测的载波侦听多路检测技术即CSMA/CD (carrier sense multiple access with collision dete ction) 的方式发送的, 而CSMA/CD是使用广播机制的, 也就是说, 发送到指定地址的帧实际上是发送到所有计算机的, 只是如果网卡检测到经过的数据不是发给自身的, 采取忽略过去而已。正是这种基于CSMA/CD的广播机制, 这就给连接在网络上的计算机捕获来自于其他主机的数据带来了可能。

在一个实际的系统中, 数据的收发是由网卡来完成的, 网卡接收到传输来的数据时, 网卡内的单片程序接收数据帧的目的MAC地址, 根据计算机上的网卡驱动程序设置的接收模式判断是否接收数据包, 认为需要接收就产生中断信号通知CPU, 认为不用接收则直接将其丢弃, 这中间的过程高层应用程序根本不知道。CPU得到中断信号后产生中断, 操作系统就调用网卡中断程序接收数据, 并把它放入信号堆栈使之为应用程序所用。

对于网卡来说一般有4种接收模式:1) 广播方式:该模式下的网卡能够接收网络中的广播信息。2) 组播方式:该模式下的网卡能够接收组播数据。3) 直接方式:该模式下只有目的网卡才能接收数据。4) 混杂模式:该模式下的网卡能够接收一切通过它的数据。所以要实现对网络的数据进行分析, 首先把网卡设置成混杂模式。

2 数据包捕获常用技术

2.1 Unix类操作系统所提供的分组捕获机制主要有以下三种

2.1.1 SVR4的数据链路提供者接口 (DLPI)

数据链路提供者接口 (DLPI, Data LinkProviderInterface) 定义了数据链路层向网络层的服务, 网络层的高层协议, 如TCP/IP协议就可以使用这个标准接口服务。

2.1.2 Linux的SOCK_PACKET类型套接口

2.1.3 伯克利数据包过滤器BPF (Be rke le yPacke t Filte r)

要捕获数据包, 必须使用数据链路访问技术, 许多源自Berkeley的实现使用BPF作为数据链路层访问手段。对于Windows系统要实现数据链路层上的数据捕获需要使用驱动程序, 网络驱动程序接口规范函数库 (NDl S函数库) 为了方便用户对网络底层的操作, 提供了许多相关函数。

2.2 基于Windows系统中, 以编程方式实现数据包捕获的方式主要有两种

2.2.1 利用原始套接字的特性实现数据包捕获

原始套接字是Windows系统中Winsock2函数库中支持的一项特性, 在使用时只用对其进行简单的设置的就可以使得网卡可以接收流经的所有数据包。

它的优点是操作系统本身支持并不需要另外添加组件, 而且简单易用, 缺点是功能比较少, 并且不支持早期的Windows操作系统, 如Window s 9x/Window s NT等。

2.2.2 第三方的数据捕获开发包

实际的应用中, Libpcap即 (the Packet Capture Library) , 即数据包捕获函数库, 是Unix/Linux平台下的网络数据包捕获函数库。它是专门的跨平台的数据捕捉函数库, 其捕获机制就是BPF。而对于Window s系统有相应的可兼容的WinPcap函数库。如图1所示。

第1个模块NPF (netgrouppacketfilter) , 是一个虚拟设备驱动程序文件, 它的功能是过滤数据包, 并把这些数据包原封不动地传给用户态模块。第2个模块Packet.dll为win32平台提供了一个公共的接口, 不同版本的Windows系统都有自己的内核模块和用户层模块。Packe t.dll用于解决这些不同, 调用Packe t.dll的程序可以运行在不同版本的Windows平台上, 而无需重新编译。第3个模块Wpcap.dll是不依赖于操作系统的, 它提供了更加高层、抽象的函数。

使用WinPcap的优点体现在以下几个方面:

1) 提供了一套标准的抓包接口, 与Libpcap兼容, 可使得原来许多Unix平台下的网络分析工具快速移植过来便于开发各种网络分析工具。2) 充分考虑了各种性能和效率的优化。3) 支持内核态的统计模式。4) 提供了发送数据包的能力。

3 结语

本文在对系统下的数据包捕获技术进行研究的基础上, 提出了几种数据包捕获技术, 分析了它们的特点。作为网络工具开发的关键技术, 网络数据包捕获技术已成为热点。

摘要:首先简要介绍了目前网络安全存在的安全隐患, 讲述了网络数据包捕获的原理, 并研究了数据包捕获在Unix和Windows环境下的常用技术, 着重讲述了套接字技术和第三方捕获开发包技术。

关键词:网络安全,数据包捕获,套接字,协议分析

参考文献

[1]庄春兴, 杨晓伟, 黄向前.网络数据包的捕获—分析与应用[J], 计算机应用与软件, 2003.

数据包捕获 篇5

1.1 工作原理

传统数据包捕获机制大多都是基于Libpcap函数库, 采用Libpcap库直接与内核交互, 来截获网络数据包。Libpcap是一个平台独立的网络数据捕获开发包, 它是一个高层的编程接口, 建立在socket基础之上, 可以捕获网络上的所有数据包。

数据包从网络设备到内核, 需要通过中断, 每到达一个数据包, 都会通过一个中断将数据包送到内核中。数据包从内核中的缓冲队列到用户空间, 需要经过一次系统调用。同时在这个过程中, 数据包经历了从网卡到内核空间、从内核空间到用户空间两次数据包拷贝。

1.2 存在的不足

基于传统TCP/IP协议栈的Libpcap函数库, 在低效的网络协议架构中导致报文传输过程中存在频繁的系统调用、数据拷贝以及上下文切换开销, 其低下的数据采集性能无法适应高速网络环境的需求。这就使得系统处理能力差, 当网络流量较大时, 数据包也易丢失。数据包在内存中的存储拷贝、中断以及系统调用成为Linux捕获数据包的瓶颈所在。

2 改进措施

目前, NAPI、device polling、零拷贝技术、PF_RING套接字等技术被提出来解决这一问题。本文是结合零拷贝技术, 采用PF_RING套接字来改进的。

2.1 零拷贝技术

其基本思想是:网络数据包从网络设备到用户程序空间传递的过程中, 减少数据拷贝次数, 减少系统调用, 实现CPU的零参与, 彻底消除CPU在这方面的负载。它可以通过修改网卡驱动程序, 使应用程序直接访问网卡在内核中的内存。其效率较高, 但由于其实现没有统一的标准, 需要建立自己的一套机制。

真正的零拷贝技术应该包括两方面:

(1) 网卡驱动程序和内核之间的零拷贝, 这可以通过事先分配可DMA的sk_buff, 并让网卡直接将数据包接收到该sk_buff。

(2) 内核和用户进程之间的零拷贝, 这可以将相应的sk_buff的数据mmap到进程的内存空间。

2.2 PF_RING套接字

PF_RING套接字是在零拷贝的基础上提出的一种新的解决方案。PF_RING基本原理是将网卡接受的数据包存储在一个环状缓存, 其有两个接口:一个供网卡向其中写数据包, 另一个为应用程序提供读取数据包的接口, 读取数据包的接口通过mmap实现。其逻辑结构图如下:

从原理上说, PF_RING是零拷贝技术的一种具体实现技术, 它不必修改网卡驱动, 而且还提供了Libpcap接口, 仅在替换Libpcap的条件下就可以提高捕包性能, 具有很好的移植性。

由于已有的零拷贝技术必须有一块可以映射到用户空间的环形缓存, 并且还要考虑用户级网络接口与Libpcap的对接问题, 因此采用PF_RING对其进行改进。

3 实现过程

3.1 PF_RING环状缓存的实现步骤

(1) 套接字被创建时, 创建环形缓存, 不同的套接字创建不同的环形缓存, 网卡收到的数据被拷贝到环形缓存中, PF_RING套接字依赖于环形缓存。

(2) 当套接字被绑定在网卡上时, 网卡一直处于只读模式, 一直到该套接字被释放。

(3) 用PF_RING套接字接受数据, 默认不直接传输到上层, 将数据包存进缓存中后将其丢弃, 并不将数据包拷贝进内核。内核将数据包拷贝进环状缓存的同时, 也获取一种缓存的写入指针。

(4) 用户空间的应用程序通过打开PF_RING类型socket的套接口描述符, 获取其环状缓存的读指针, 然后通过mmap () 来访问PF_RING的环状缓存。应用程序读取数据包以后将移动缓存的读取指针。

3.2 使用PF_RING捕获数据包

PF_RING提供了套接口封装函数和Libpcap接口, 重新编译安装PF_RING补丁的Libpcap后, 加载PF_RING内核模块, 就可以通过socket/Libpcap接口使用PF_RING了, 以下给出socket编程主体代码以及注释。

3.3 测试结果

对数据捕获平台的性能进行测试, 主要考虑的是其捕包率。比较改进前后两者的数据包的捕获率, 如下图所示:

从实验结果表明, PF_RING套接字显著提高了系统的数据包捕获性能, 特别是对小数据包, 更加显著。

4 结束语

本文在分析传统捕包机制存在的不足的同时, 结合零拷贝技术, 提出基于PF_RING套接字的数据包捕获实现方法, 使用环形缓冲区, 用来实现内核空间和用户空间的内存共享。较详细地分析了其实现过程, 从测试结果可以看出改进后的捕包性能得到了提高。虽然结合零拷贝技术, 但PF_RING并非一次也没有进行内存拷贝, 在将skb添加到环状缓存的时候就完成了一次拷贝技术, 这也是PF_RING和零拷贝实现的一个区别。

摘要:网络数据包捕获技术在网络安全领域有着广泛的应用, 但传统的捕包机制存在着一些系统瓶颈问题, 导致在网络流量较大时, 系统出现大量的丢包现象, 其低下的数据采集性能已无法适应高速网络环境的需求。结合零拷贝技术, 应用PFRING套接字对传统的捕包机制进行改进, 介绍了其实现过程, 并给出实验测试结果加以验证。

关键词:数据包捕获,零拷贝技术,PFRING套接字,环形缓存

参考文献

[1]王佰玲, 方滨兴, 云晓春.零拷贝报文捕获平台的研究与实现[J].计算机学报, 2005 (1) .

[2]张宇雷, 黄皓.基于网络处理器的零拷贝技术[J].计算机应用, 2007 (1) .

[3]祁超杨, 谭建明, 李明.基于Linux的网络数据包捕获机制的研究[J].计算机与网络, 2008 (2) .

数据包捕获 篇6

1.1 Winpcap简介

Winpcap (windows packet capture)是由意大利人F u l v i o R i s s o和L o r i s Degioanni提出并实现的[1]。它是一个Windows平台下捕包和网络分析的体系架构。它具有访问底层的能力, 提供了捕获原始数据包, 按照一定规则过滤数据包, 以及发送原是数据包的功能.WinPcap为用户级的数据包提供了Windows下的一个平台。WinPcap是BPF模型和Libpcap函数库在Windows平台下网络数据包捕获和网络状态分析的一种体系结构, 这个体系结构是由一个核心的包过滤驱动程序, 一个底层的动态连接库Packet.dll和一个高层的独立于系统的函数库Libpcap组成。底层的包捕获驱动程序实际为一个协议网络驱动程序, 通过对N D I S中函数的调用为Win95、Win98、WinNT和Win2000提供一类似于UNIX系统下Berkeley Packet Filter的捕获和发送原始数据包的能力。Packet.dll是对这个BPF驱动程序进行访问的A P I接口, 同时它有一套符合Libpcap接口 (UNIX下的捕获函数库) 的函数库。WinPcap的主要结构图如图1。

1.2 winpcap构成

WinPcap主要有三个模块构成[2,3]:第一个模块NPF (Netgroup Packet Filter) ,是一个虚拟设备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。第二个模块packet.dll为win32平台提供了一个公共的接口。不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同。调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。第三个模块Wpcap.dll是不依赖于操作系统的。它提供了更加高层、抽象的函数。

packet.dll和Wpcap.dll:packet.dll直接映射了内核的调用。Wpcap.dll提供了更加友好、功能更加强大的函数调用。WinPcap的优势提供了一套标准的抓包接口, 与libpcap兼容, 可使得原来许多UNIX平台下的网络分析工具快速移植过来便于开发各种网络分析工具, 充分考虑了各种性能和效率的优化, 包括对于NPF内核层次上的过滤器支持, 支持内核态的统计模式, 提供了发送数据包的能力。图2显示了Winpcap的不同组件。

2、网络数据包捕获的原理及软件的实现

2.1 数据包捕获原理

以太网(Ethernet)具有共享介质的特征,当网络适配器设置为监听模式(混杂模式,Promiscuous)时,由于采用以太网广播信道争用的方式,使得监听系统与正常通信的网络能够并联连接,并可以捕获任何一个在同一冲突域上传输的数据包。IEEE802.3标准的以太网采用的是持续CSMA的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我们所要的信息,这是捕获数据包的物理基础[4]。

以太网是一种总线型的网络,总线的特点是:当一台计算机发送数据时,总线上所有计算机都能检测到这个数据[5]。以太网从逻辑上来看是由一条总线和多个连接在总线上的站点所组成各个站点采用上面提到的CSMA/CD协议进行信道的争用和共享。每个站点(这里特指计算机通过的接口卡)网卡来实现这种功能。网卡主要的工作是完成对于总线当前状态的探测,确定是否进行数据的传送,判断每个物理数据帧目的地是否为本站地址,如果不匹配,则说明不是发送到本站的而将它丢弃。如果是的话,接收该数据帧,进行物理数据帧的CRC校验,然后将数据帧提交给LLC子层。

2.2 Winpcap编程模式

Winpcap提供了数据包的捕获功能,在不同的应用中需要设计不同的协议分析模块。针对不同的协议,设计相应的协议分析功能,是基于Winpcap应用的关键所在[6]。在基于Winpcap的应用程序中,有基本的编程模式。使用Winpcap捕获和分析网络数据包的基本流程如图5所示。

2.3 数据包捕获的实现

捕获过程按先后顺序具体步骤如下:

1).寻找系统中可用的接口列表。

2).选择接口并将其设为混杂模式准备捕捉。

3).将捕捉到的数据包保存到文件以便读取和分析。

4).读取保存在文件中的数据包并进行分析。

5).关闭接口。

本软件建立在Winpcap架构的第三层模块W i n p c a p.D l l之上。使用V i s u a l C++6.0开发平台利用多线程技术实现。主线程负责寻找和选择网络接口、设置分析过滤器、分析捕获数据包。子线程负责打开选择的接口并将其设为混杂模式、捕获数据包并将其保存到文件中。其流程图见图3,图4。

3、软件运行及实验结果

运行该软件应确保本地机器上安装了Winpcap驱动,可从其官网下载。软件运行效果如图6所示。

4、结束语

本文实现的这个系统可以监听局域网内流经所有主机的数据包,并分析了每个包的协议、源/目的Mac地址、源/目的IP地址、数据包长度和包内的数据既可以管理和维护网络健康运行还可以检测网络入侵, 甚至可以学习网络协议知识。

本系统也有一些不足和需要改进的地方:

(1) 跨平台运行兼容性需要改进。本系统只能运行在Windows NT, Windows2000, Windows Xp并且机器上必须安装Winpcap才能运行。

(2) 只能在局域网内捕获数据包, 无法跨路由进行监测。

虽然基于Winpcap的网络数据协议分析软件在应用中还有许多局限性, 但是仍然作为一种代表性的技术, 对于今后发展更高层的网络安全应用提供了前提和基础通过对这方面的研究, 可以理解网络各层通讯协议的机理。

摘要:介绍了winpcap的结构组成和Winpcap的包捕获操作的重要部件。在visualc++环境下采用多线程技术实现数据包捕获的方法;并根据TCP/IP协议簇对捕获到的数据包进行分析, 并给出有效实验结果。

关键词:Winpcap,包捕获,多线程,协议分析

参考文献

[1]胡晓元, 史浩山.Winpcap包捕获系统的分析及其应用[J].计算机工程.2005, 96-98

[2]The Winpcap Team.The Winpap manual and tutorial for Winpcap4.0[EB/OL].Http://www.Winpcap.org/docs/docs_40/html/main.html, 2006-05-30.

[3]陈辉, 陶洋.基于Winpcap实现对ARP欺骗的检测和恢复[J].计算机应用.200424 (10) :67-68, 85

[4]徐美华, 王振旗, 韩秀娟.利用WinPcap技术捕获数据包

[5]谢希仁.计算机网络 (第4版) [M].电子工业出版社.20036:94-96

数据包捕获 篇7

互联网逐渐进入移动互联网时代,随着智能手机的普及手机在人们的生活中扮演着越来越不可缺少的角色,基于手机的APP开发更是层出不穷并且已经渗透到生活的方方面面。如手机商城、分享功能、产品( 服务) 预订功能、购物车功能、订单功能、电子刮刮乐功能、消息推送强制模式、在线客服、即时互动、电子会员卡功能、电子优惠券功能、MAP地图功能、LBS定位功能、企业社区功能、满足多种需求的展示应用、高级统计功能、自主的后台管理功能、无缝衔接功能、智能回复、在线支付功能等等。正因如此App开发的市场需求与发展前景日益蓬勃。

目前市场上智能手机的开发平台主要有两个:一是IOS( 苹果公司的移动操作系统) 二是Android( Google公司开发的基于Linux操作系统) 。虽然IOS在操作体验、画面细腻、系统稳定、数据存储安全、单块电板续航等方面有很大的优势,但Android系统以其代码开源、硬件丰富、开发方便自由、购机选择多样性备受手机生产厂商和第三方开发商的青睐。在开发过程中研发和测试人员都需要对投放市场的APP程序进行调制、完善,这样自然少不了通过捕获手机收到和发出无线数据包以分析定位故障发生的原因。常用的抓包方法有两类,一类是通过Android智能移动终端所接入的上层网络设备或线路获取数据流; 另一类则是直接在Android移动终端上监听数据流。本文主要探讨第二类方法。

2 Android 平台特性分析

Android系统是一种基于Linux的开放源代码操作系统,主要运用于移动设备如智能手机和平板电脑,由Google公司和开放手机联盟领导开发。Android系统架构采用了分层架构的思想,架构清晰、层次分明、协同工作。自顶向下可以分为四层,分别是应用程序层、应用程序框架层、系统库和Linux内核。每层功能简要介绍如下:

应用程序层,该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。这一层一般由Java语言编写,因为Java更有利于界面开发。应用程序框架层,该层是Android应用开发的基础,具体包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分; 系统库,系统库包括九个子系统,分别是图层管理、媒体库、SQLite、Open GLEState、Free Type、WebKit、SGL、SSL和libc。Linux内核,Android核心系统服务依赖于Linux2. 6内核,它主管Android系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等。Linux内核是系统硬件与上层软件的抽象层。Android运行时包括Linux核心库和Dalvik虚拟机,前者兼容了大多数Java语言所需要调用的功能函数。

Android操作系统最初由Andy Rubin开发。2005年8月由Google收购并注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式发布了Android的源代码。第一部Android智能手机发布于2008年10月。之后Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2013年的第四季度,Android平台手机的全球市场份额已经达到78.1% 。2013年09月24日谷歌开发的操作系统Android迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。2014第一季度Android平台已占所有移动广告流量来源的42. 8% ,首度超越IOS。目前Android系统的手机种类很多,卖的不错的有Moto、三星、HTC、华为、小米、索爱、LG、黑莓等。

3 将 Tcpdump 移植到Android 智能手机

Tcpdump可以将网络中传送的数据包的头部完全截获下来提供分析样本。它支持针对网络数据报文基于网络分层结构的逐层解释及通过协议类型、主机IP地址、端口ID的过滤,并可利用and、or、not等逻辑语句去掉无用的信息。Linux作为网络服务器,特别是作为路由器和网关时对数据的采集和分析是不可少的。Tcpdump是Linux中强大的网络数据采集分析工具之一。Tcpdump提供了源代码公开了接口,因此具备很强的可扩展性,对于网络维护和入侵都是非常有用的工具。由于它是由C语音编写,移植到Android系统时候需要经过交叉编译才可以使用。在本文3. 2节中详细讲述了如何进行Tcpdump源码的交叉编译。

3. 1 下载所需的工具

( 1) Android SDK( software development kit) Android软件开发工具包

对Android手机进行 开发需要 用到AndroidSDK它是Android专属的软件开发工具包。AndroidSDK采用Java语言编写,所以需要先安装JDK 5. 0及以上版本并在PC上设置环境变量以保证Java程序的运行。Android SDK不用安装,将下载后 的SDK的压缩包解压到适当的位置就可以使用了。

( 2) Android adb ( Android Debug Bridge) 调试Android APP工具

通过adb我们可以在Eclipse中很方便的通过DDMS来调试Android应用程序,是一个debug工具。在Android SDK/Tools文件夹下包含着Android模拟器操作的重要命令。可以直接进入Android SDK / Tools目录下操作adb命令; 也可以在PC上通过设置系统变量的方式让adb命令可以直接在PC的命令窗口里面运行。具体方法是首先将Android手机通过Console线连接上PC机后; 接着在PC机'开始'运行'键入cmd打开命令行窗口后键入adb devices。如果ADB安装成功命令窗口会弹出如下Android手机设备信息:

C: Documents and Settings Administrator > adbdevices

List of devices attached

0A3C31D91001C019 device

再如当手机仅仅开启了Wifi后使用ADB命令adb netcfg会显示手机网络接口信息如图1所示( 192. 168. 12. 2是手机获得的IP地址) 。

当手机仅仅开启了移动网络后使用ADB命令adb netcfg会显示手机网络接口信息如图2所示( 10. 56. 198. 159是手机获得的IP地址) 。

( 3) Tcpdump和Libpcap源码包的下载

它的官方网站是http: / /www. tcpdump. org,可以在Latest Release目录里下载它。Tcpdump提供了对多种操作系统的支持如Windows和Linux平台。目前针对Android平台的源代码包的最新版本是tcpdump - 4. 5. 1. tar. gz,发布时间时间是2013年11月20,Lipcap - 1. 5. 3. tar. gz发布时间是2014年1月14日。libpcap是Unix / Linux平台下的网络数据捕获函数包,大多数网络监控软件都以它为基础。

( 4) Android NDK( Native Development Kit) 集成开发环境NDK提供了一系列的工具,帮助开发者快速开发C( 或C + + ) 的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件( 指出" 哪些文件需要编译" 、" 编译特性要求" 等) ,就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。下载地址http: / /developer. android. com / sdk / ndk / index. html ,本文采用的是android - ndk - r8b。

3. 2 移植 Tcpdump 的具体步骤

( 1) 使用NDK制作编译工具链

从网上可以找到一些ARM Toolchain,但是由于Android系统使用的不是glibc而是Bionic libc。因此只能使用静态编译程序。Android NDK自带了Toolchain,但是不能直接使用NDK目录内的Toolchain,否则会出现找不到crtbegin_dynamic. o文件。即使使用 - L指定目录或者直接放到gcc命令行也还是提示该文件找不到。Android NDK因此提供了脚本来剥离出单独的toolchain,脚本的名字叫make- standalone - toolchain. sh。

解压NDK至指定目录下:

cd 到 android - ndk - r8b / build / tools / make standalone - toolchain. sh - - platform = android - 8

默认便在[/tmp /ndk - NAME]目录下生成工具链,如下:

最终得到的是一个压缩包 /tmp /ndk - NAME /arm - linux - androideabi - 4. 5. 1. tar. bz2。

( 2) 编译Tcpdump为Android平台上可以使用的程序

将Libpcap源码包解压至/home /work /tcpdump /libpcap - 1. 5. 3,将Tcpdump的源码包 解压至 /home / work / tcpdump / tcpdump - 4. 5. 1。然后分别对它们进行编译。对Libpcap和Tcpdump分别使用下列编译命令:

. / configure - prefix = / home / jgf / work / tool / arm- linux - androideabi - host = = arm - linux - androideabi

C = arm - linux - androideabi - gcc

编译通过后在Android手机的/home /igf/work /tool / arm - linux - androideabi / sbin / 目录下就出现了tcpdump。将此tcpdump插件使用adb push命令拷贝到Android平台的/system/bin /目录下。至此就可以在Android手机上运用Tcpdump命令参数进行捕捉无线数据包了。

4 利用 Tcpdump 捕捉无线数据包

下面以三星Galaxy Nexus( Android版本: 4. 2.2) 手机为例介绍捕捉无线数据包的方法。

4. 1 确定手机 root 成功

Android手机需要先获得root权限并开启调试模式。不同的手机取得root权限的方法不一样。在此不冗述。判定手机是否获得root权限的检验方法: 将Android手机与电脑USB相连,打开windows命令提示符窗口并打开终端模拟器。在终端模拟器界面输入su并回车,若报错则说明未root,若命令提示符从 $ 变#则为rooted( 在运行su指令后,手机终端桌面会出现相应提示信息以确认您对root操作的认可) ,如图3所示。

4. 2 拷贝 Tcpdump 到手机 Local目录下并赋予它读写权限

将tcpdump程序拷贝至android手机( 该命令前面那个目录文件为本地地址,后面那个目录为目的手机端地址) :

C: Documents and Settings Administrator > adbpush c: / tcpdump / data / local / tcpdump

修改tcpdump的权限:

C: Documents and Settings Administrator > adbshell

#chmod 777 / data / local / tcpdump

4. 3 开始抓包

运行tcpdump,输入以下命令行启动抓包程序/data / local / tcpdump - p - vv - s 0 - w / sdcard / capture. pcap,如图4所示。

在手机端执行相应需要进行抓包分析的操作,执行完成后在命令提示符窗口执行Ctrl + C中断抓包进程;

将抓包结果复制至本地( 前面那个目录为手机端地址,后面那个目录为本地地址) C: Documents and Settings Administrator > adb pull / sdcard / capture. pcap c: / ,如图5所示。

使用Wireshark工具查看抓包文件capture.pcap,如图6所示,这些包里面有手机发出的数据包,也有收到的数据包。其中OICQ为手机上QQ软件发出来的包。

5 总 结

本文围绕利用Tcpdump捕捉手机发送和接收的无线数据包展开,帮助第三方手机应用软件分析软件缺陷具有较高的现实意义。本文介绍了如何将tcpdump移植到Android系统; 以及当Android手机安装了Tcpdump插件后,如何利用命令行参数捕获流经手机的数据包。该方法可帮助应用软件开发及测试人员分析、验证程序的正确性和稳定性。

网络数据捕获技术的探究 篇8

随着互联网在教育、科技、医疗、军事等各个领域的普及, 为我们提供了各种各样的服务。但是, 随着互联网的快速发展, 我们在享受互联网带来的丰富信息和巨大便利的同时, 也面临着网络安全的严重威胁。

因此, 如何对网络应用进行有效管理, 对网络信息的内容进行有效监控和过滤, 抑制有害信息的传播已经成为净化网络空间、维护社会安定和国家稳定的重要问题。网络监控是保障网络安全的基本措施之一。在网络拓扑中的关键位置对数据报文进行捕获、分析和监控, 可以减少和杜绝由互联网技术所带来的网络内容安全问题。

2 数据捕获技术的研究

2.1 数据捕获的概念和基本原理

计算机将数据在网络上传输时, 为了保证所有网络共享资源的公平性和快速性, 通常把传输数据分割成若干个小块。我们称这样被分割的传输单位为包, 或“数据包”。当前从网络中对数据包进行捕获的方法有以下两种, 其一是用专用硬件进行捕获, 这种方法性能好但是价格昂贵;其二是用通用硬件——普通计算机与网络连接的网络适配器, 即网卡, 采用软件的方法来实现数据包的捕获。软件捕获方法虽然没有专用硬件捕获性能好, 但采用软件捕获的方法却以其实现成本相对较低、可修改、可重用等优点, 得到了认可和广泛的使用。

从网络中捕获数据包是网络安全解决方案的基础。而要想捕获到网络上流经的所有数据包, 就需要先研究网络上数据包的传送方式。局域网的通信一般都采用广播方式, 网络上的每个站点共享信道, 一个站点发出的数据包, 其他站点均能收到, 也就是说, 任一台计算机都可以接收到网络中同一个共享域的所有的数据通讯。

2.2 数据包捕获机制

包捕获技术就是从网络上捕获全部或特定的网络数据包提供给其它系统使用。本文是利用局域网的广播通信方式来完成数据包的捕获工作。

在每张通讯的网卡上都有一个全球唯一的物理地址, 即MAC地址。MAC地址是一个48位的二进制数。在以太网卡中实现对广播地址进行过滤的是数据包过滤器。它的工作原理是:保留通讯目的地址是本身网卡MAC地址的数据包和广播数据包, 丢弃无关的数据包, 避免浪费CPU资源。这是以太网卡在正常情况下的工作方式。因此网络接口应该只对以下两种数据包进行处理:

(1) 本地网络接口的硬件地址和数据包的目标地址相匹配。

(2) 将“广播地址”作为数据包的目标地址, 它代表所有的接口地址, 格式为“FFFFFFFFFFFF”。

在以上两种情况下, 网卡通过CPU产生中断, 操作系统进行中断处理, 将帧中的数据传送给上层系统进行处理。其他情况下操作系统不作处理, 数据帧将被丢弃。

因此要想捕获流经网卡而目标地址不是本机网络接口地址的数据, 必须改变系统正常的工作模式。当网卡的工作状态设为“混杂” (promiscuous) 模式时, 该网卡就具备了“广播地址”, 会接收到经过该网卡的每一个数据包, 并通过硬件中断的方式来提醒CPU进行中断处理, 因此就可以实现捕获流经本机网卡的任意数据包。数据包的捕获工作, 分为以下几个部实现分:

1) 获取网络设备接口表单;

2) 将网卡工作状态设置为“混杂模式”;

3) 判断是不是10MB的以太网;

4) 设置、编译过滤规则;

5) 过滤规则与网卡进行绑定;

6) 捕获数据包以及判断是否要继续循环捕获;

7) 释放网络设备接口表单。

3 访问数据链路层方法

数据链路层处于协议栈的第2层, 基于物理层之上。所有的上层协议都要直接或间接使用数据链路层协议提供的服务。在大多数情况下, 访问数据链路层协议所提供的服务是内核中的一些高层协议实现的。但在某些情况下, 应用程序不经过高层协议, 需要直接访问数据链路层所提供的服务, 捕获技术就是应用程序获取数据链路层的报文。当前几乎所有的操作系统都支持应用程序直接访问数据链路层, 其中, 应用最广泛的报文捕获函数库是基于BPF过滤机制的Libpcap库。下面我们来介绍基于BPF过滤机制的捕获方法和Libpcap分组捕获函数库。

3.1 BSD分组过滤器BPF

BSD分组过滤器BPF (Berkeley Packet Filter) , 即伯克利数据包过滤器, 它是洛仓兹伯克利试验室的研究人员Steven Mc Canne和Van Jacobson研究的一种用于Unix内核的数据包过滤体制, 是实现访问数据链路层服务的接口。BPF不仅能够捕获经过数据链路层的所有分组, 最重要的是它还提供分组过滤功能, 即捕获应用进程想要的分组信息。通过ined命令, 可以配置BPF设备属性, 如装入过滤器, 设备读超时、缓存大小、打开混杂模式等等。设置完成后, 就可以读写BPF设备了。把安装好过滤程序的BPF与网络接口相关连, 就可以实现对输入的分组选择性地接收。BPF还采用了以下三种技术来减少开销:

1) BPF过滤器运行在内核中, 从而减少了从BPF到应用进程之间数据量的拷贝。

2) BPF传递给应用进程的是满足条件分组中的部分数据, 这被称为捕获长度 (capture length) 。因为大部分应用进程需要的是分组头部, 而非分组的全部数据。这同样减少了从内核到用户空间数据量的拷贝。

3) BPF采用双缓存技术 (double buffering) , 将要传送给应用进程的分组数据先存入缓存, 当缓存已填满或者读超时时才将分组数据传送给应用进程。缓存的存在减少了系统调用次数, 即降低了系统开销。在每个应用进程中BPF都设置了两个缓冲区, 当一个缓冲区给应用进程传送数据时, 启用另一个缓冲区来填装数据, 这就是典型的双缓冲技术。

3.2 分组捕获函数库Libpcap

Libpcap (Libaray for Packet Capture) , 即分组捕获函数库, 是由劳伦斯鉻伯克利国家实验室开发的一个在用户级进行实时分组捕获的接口, 其特点是独立于操作系统, 成为开发跨平台的分组捕获和网络监视软件的首选工具。Libpcap for Win32将Libpcap移植到了微软的Windows系列操作系统上, 一个最常用的实例就是Win Pcap。它是一个基于Libpcap模型, 在Win32平台上实现分组捕获和网络分析的体系结构。

4 结束语

网络数据捕获技术是网络安全监控的基础, 本文通过对网络数据捕获技术的研究, 简要介绍了数据捕获的概念、基本原理和捕获机制, 为网络安全解决方案提供了理论依据。

摘要:网络监控是保障网络安全的基本措施之一。在网络拓扑中的关键位置对数据报文进行捕获、分析和监控。本文着重分析了数据捕获的概念和基本原理、数据包捕获机制, 以及捕获数据包的方法。

关键词:网络安全,数据捕获,捕获机制

参考文献

[1]郑挺.高速网络安全监控系统的研究与实现, 国防科学技术大学, 2003。

[2]李爱平, 郝英.网络监控系统中数据包捕获分析模块的实现, 网络安全, 2007。

上一篇:数字化时代的品牌突围下一篇:适度劳动