分享
 
 
 

WpdPack

王朝百科·作者佚名  2010-05-06
窄屏简体版  字體: |||超大  

WpdPack是WinPcap的开发包,提供了使用WinPcap必须的头文件和库文件,现阶段开始SendPkt使用的是WinPcap 3.1及其对应的WpdPack。

随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要。在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数据包捕获,网络管理员才能对所捕获的数据进行一系列的分析,从而进行可靠的网络安全管理。

1winpcap简介

WinPcap 是由伯克利分组捕获库派生而来的分组捕获库,它是在Windows 操作平台上来实现对底层包的截取过滤。WinPcap 为用户级的数据包提供了Windows 下的一个平台。WinPcap 是 BPF 模型和 Libpcap 函数库在 Windows 平台下网络数据包捕获和网络状态分析的一种体系结构,这个体系结构是由一个核心的包过滤驱动程序,一个底层的动态连接库 Packet.dll 和一个高层的独立于系统的函数库 Libpcap 组成。底层的包捕获驱动程序实际为一个协议网络驱动程序,通过对 NDIS 中函数的调用为 Win95、Win98、WinNT、和 Win2000 提供一类似于 UNIX 系统下 Berkeley Packet Filter 的捕获和发送原始数据包的能力。Packet.dll 是对这个 BPF 驱动程序进行访问的 API 接口,同时它有一套符合 Libpcap 接口(UNIX 下的捕获函数库)的函数库。WinPcap的结构图如图1。

WinPcap 包括三个部分:第一个模块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网络数据包捕获的原理

3在windows情况下捕获数据包的结构

4利用winpcap进行网络数据包的捕获和过滤的设计步骤

5主要源代码

根据用 Windows 分组捕获库 WinPcap 提供功能首先要初始化两个结构体,一个是适配器的结构体 LpAdapter, 一个是存放接收到的数据包的结构体 RecvPacket。

使用 Packet.dll 动态连接库编写源代码:

#define MAX__LINK__NAME__LENGTH 64

适配器结构:

typedef struct__ADAPTER

{

HANDLE hFile;

TCHAR Symboliclink[MAX__LINK__NAME__LENGTH];

Int NumWrites;

} ADAPTER , *LPADAPTER;

说明:hFile 是一个指向该网络适配器 Handle 的指针,通过它可以对网络适配器进行操作。symboliclink 包含当前打开的网络适配器的名字。

数据包结构:

typedef struct _PACKET

{

HANDLE hEvent;

OVERLAPPED OverLapped;

PVOID Buffer;

UINT Length;

PVOID Next;

UINT ulBytesReceived;

BOOLEAN bloComplete; //控制接受包的开始和结束

数据包捕获实现的步骤的主要源代码:

1)要获得适配器列表。

#define Max__Num__Adapter 10 //获得适配器列表

char Adapterlist [Max__Num__Adapter[512]]

int i=0

char AdapterNames[512], *tempa,*templa;

ULONG AdapterLength=1024; } PACKET, *LPPACKET:

2)获得系统中网络适配器的名字。

PacketGetAdapterNames(AdapterNamea,&AdapterLength);

tempa=AdapterNamea;

templa=Adapternamea;

while ((*tempa!=’’)∣∣(*tempa-1!=’))

{

if (*tempa= =’’)

{

memcpy(AdapterList,temla,tempa-templa); //内存数据拷贝

templa=tempa+1;

i++

}

tempa++

}

3)从适配器列表中选择一个默认的 0 号适配器。

LPADAPTER lpAdapter

lpAdapter = PacketOpenAdapter (AdapterList[0]);

if (!lpAdapter∣∣(lpAdapter->hFile==INVALID__HANDLE__VALUE))

{

dwErrorCode=GetLastError();

return FALSE;

}

4)将所选择的适配器 lpAdapter 设置为混杂模式。

PacketSetHwFilter(lpAdapter,NDIS_PACKET_TYPE_PROMISCUOUS)

5)设置 BPF 内核中包过滤的过滤器的代参政。利用这个函数右以完成对于原始数据包的初始的过滤处理,如根据其中端口号、IP 地址等。

PacketSetBpf(LpAdapter AdapterObject,structbpf_program*fp)

6)设置缓冲池为512K字节。

PacketSetBuff(lpAdapter,512000);

7)分配一个数据包对象,并连接已分配的缓冲。

PacketInitPacket(lpPacket,(char*)bufferReceive,512000);

8)捕获多个数据包。从网卡 lpAdapter 接收数据包,并将数据包放入 lpPacket所指向的数据包结构体中,若接收成功返回 TRUE,否则返回 FALSE。

PacketReceivePacket(lpAdapter,lpPacket,TRUE);

9)通过触发回调函数,把捕获符合过滤器规则的数据包转发给网络协议分析模块进行分析处理。

10) 结束接收数据包,释放数据包对象。

if(lpPacket!=NULL

{

PacketFreePacket(lpPacket);

lpPacket=NULL;

}

11)关闭网卡设备,将网卡恢复到正常接收状态。

if(lpAdapter!=NULL

{

PacketCloseAdapter(lpAdapter);

lpAdapter=NULL;

}

6结束语

数据包捕获技术是网络管理系统的关键技术,已经按照标题4中的流程进行了简单的实现。如果在一个繁忙的网络上进行截获,而不设置任何过滤,那得到的数据包是非常多的,可能在一秒钟内得到上千的数据包。如果应用程序不进行必要的性能优化,那么将会大量的丢失数据包。对捕包性能的优化必不可少,考虑采用多线程来处理数据包。若在程序中建立一个公共的数据包缓冲池,这个缓冲池是一个LILO的队列。于是在程序中使用三个线程进行操作:一个线程只进行捕获操作,它将从驱动程序获得的数据包添加到数据包队列的头部;另一个线程只进行过滤操作,它检查新到的队尾的数据包,检查其是否满足过滤条件,如果不满足则将其删除出队列;最后一个线程进行数据包处理操作,象根据接收的数据包发送新数据包这样的工作都由它来进行。考虑尽可能少丢失数据包的条件,应该是进行捕获操作的线程的优先级最高,这样就可以得到更高的捕包性能。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有