WinPcap开发-零基础知识入门基础

合集下载

WinPcap开发包的使用

WinPcap开发包的使用

1.下载安装WinPcap

安装驱动

/install/bin/WinPcap_4_1_2.exe

下载开发包

/install/bin/WpdPack_4_1_2.zip

若未安装驱动直接编译,能通过编译但运行时会报错

2.工程属性:设置预处理器定义

∙如果你在程序中使用了WinPcap中提供给Win32平台的特有的函数,记得在预处理中加入WPCAP的定义。

∙如果你的程序使用了WinPcap的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE。不要直接把remote-ext.h直接加入到你的源文件中去。

2.VS属性:设置C++目录

可能需要加入C:\Windows\System32 ,否则无法使用控制台。

3.工程属性:设置连接器

4.参考开发包中文档进行编程编译运行

深度剖析WinPcap之(一)

深度剖析WinPcap之(一)

深度剖析WinPcap之(一)——WinPcap简介

WinPcap是Windows平台下访问网络数据链路层的开源库,该库已达到工业标准的应用要求。WinPcap允许应用程序绕开网络协议栈来捕获与传递网络数据包,并具有额外的有用特性,包括内核层的数据包过滤、一个网络统计引擎与支持远程数据包捕获。

1.1. 什么是WinPcap

大多数网络应用程序通过被广泛使用的操作系统原语来访问网络,诸如sockets。操作系统已经处理了底层的细节问题(如协议处理,数据包的封装等),并提供与读写文件类似的、熟悉的接口,这使得用该方法可以很容易的访问网络中的数据。

然而有些时候,这种“简单的方式”并不能满足任务要求,因为有些应用程序需要直接访问网络中的数据包。也就是说,应用程序需要访问网络中的“原始”数据包,即没有被操作系统使用网络协议进行处理过的数据包。

WinPcap的目的就是为Win32应用程序提供这种访问方式。WinPcap提供下列功能:

捕获原始数据包,无论是发送到运行WinPcap机器上的数据包,还是在其它主机(共享介质)上进行交换的数据包

在数据包分派给应用程序前,根据用户指定的规则过滤数据包

将原始数据包发送到网络

收集网络流量的统计信息

1.2. WinPcap的优点

1) 自由 WinPcap遵循BSD open source licence发布。这意味着你的应用程序拥有全部自由来修改与使用它,即使应用程序是商业化的。

2) 高性能 WinPcap实现了有关数据包捕获文献中描述的所

有典型的优化方法(比如内核级的过滤与缓冲,减少上下文交换,数据包部分内容复制),加上一些原创的优化方法,如JIT过滤器编辑(JIT filter compilation)与内核级的统计过程。因为这些原因,WinPcap胜过其它可比的方法。

WinPcap 原理技术

WinPcap 原理技术

WinPcap 原理技术

winpcap是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。

1、网络及协议分析

2、网络监控

3、通信日志记录

4、traffic generators

5、用户级别的桥路和路由

6、网络入侵检测系统(NIDS)

7、网络扫描

8、安全工具

WinPcap导入

WinPcap是一个开源的专业网络数据捕获开发包,其实,WinPcap的强大功能并不仅限于数据包的获取,主要功能:

捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;

在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;

在网络上发送原始的数据包;

收集网络通信过程中的统计信息。

Sniffer 嗅探原理

Winpcap是针对Win32平台上的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)

Packet.dll提供更方便更易用的编程接口,wpcap.dll中的接口函数

Sniffer嗅探器,是一种基于被动侦听原理的网络分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。

当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。Sniffer技术常常用于网络故障诊断、协议分析、应用性能分析和网络安全保障等各个领域。

WinPcap基础知识(第五课:过滤信息)

WinPcap基础知识(第五课:过滤信息)

WinPcap基础知识(第五课:过滤信息)

WinPcap提供的最强大的特性之一就是过滤引擎。它是被集成到了winpcap的捕获机制中的,提供了一种非常高效的方法来获取部分网络数据。被用来过滤数据包的函数是pcap_compile() 和pcap_setfilter()。

pcap_compile() 接受一个包含布尔表达式的字符串,生成可以被捕获包驱动中的过滤引擎解释的代码。布尔表达式的语法在这个文档的Filtering expression syntax 那一节(译者注:其实和tcpdump的一样,如果了解tcpdump,可以直接按照tcpdump的语法来写)。

pcap_setfilter() 绑定一个过滤器到一个在核心驱动中的捕获进程中。一旦 pcap_setfilter() 被调用,这个过滤器就会对网络来的所有数据包进行过滤,所有符合条件的数据包(按照布尔表达式来计算出结果是真的数据包)都会被拷贝给进行捕获的应用程序。

下面的代码说明了怎样编译和设置一个过滤器。注意我们必须得到说明适配器的pcap_if 结构中的子网掩码,因为一些被pcap_compile() 生成的过滤器需要它。这个过滤器中传递给pcap_compile() 的字符串是 "ip and tcp",意思是“仅仅把IPv4 and TCP 数据包保存下来并交付给应用程序”。

view plaincopy to clipboardprint?

if (d->addresses != NULL)

/* Retrieve the mask of the first address of the interface */ netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;

winpcap编程_适合当讲授课件

winpcap编程_适合当讲授课件

要向VC++6.0中添加一个新的包含文件所在的路径,你必 须打开Tool菜单,选择Options,然后选择Directories选项卡, 在Show directories下拉框中选择Include files,并且将新的 路径添加到Directories中去 。
二、获得设备列表
通常,编写基于WinPcap应用程序的第一件事情,就是获得已 连接的网络适配器列表。WinPcap提供了 pcap_findalldevs_ex( ) 函数来实现这个功能:
由 pcap_findalldevs_ex()返回的每一个 pcap_if 结构体, 都包含一个 pcap_addr 结构体,这个结构体由如下元素组成:
通过返回的结构,我们可以得到探测到的网卡设备的更 详尽信息。
例子:
二、打开适配器开始捕获数据包
现在,我们已经知道如何获取适配器的信息了,那我们就开始 一项更具意义的工作,打开适配器并捕获数据包。本节中,我们会 编写一个程序,将每一个通过适配器的数据包打印出来。
如果使用Hub等基于共享的网络的情况下,网络上所有的机器都可以 “听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说, 工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。如果 某个工作站的网络接口处于混杂模式,那么它就可以捕获网络上所有的数 据包和帧。 但是现代网络常常采用交换机作为网络连接设备枢纽,在通常情况下, 交换机不会让网络中每一台主机侦听到其他主机的通讯,因此Sniffer技术在 这时采用网络端口镜像技术进行配合。

第7章 Winpcap编程技术

第7章 Winpcap编程技术
如果运行成功,返回一个_PACKET结构的 指针,否则返回NULL。成功返回的结果将会 传送到PacketReceivePacket()函数,接收来自 驱动的网络数据报。
2、 VOID PacketInitPacket(LPPACKET lpPacket, PVOID Buffer, UINT Length)
返回某个网络适配器的地址信息。
23
常州大学信息学院
网络编程
12、BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) 返回某个网络适配器的类型和速度。
13、BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s)
10
常州大学信息学院
网络编程
2、typedef struct _PACKET *LPPACKET
描述一组网络数据包的结构。它包含 了以下几个域: OVERLAPPED OverLapped PVOID Buffer UINT Length PVOID ulBytesReceived BOOLEAN bIoComplete
当前捕获数据报的统计信息, bpf_stat结构包含: bs_recv: 从网络适配器开始捕获数据 报开始所接收到的所有数据报的数目。 bs_drop: 丢失的数据报数目。 ps_ifdrop:被网卡丢弃的数据报数目。 bs_capt:通过过滤器的数据报数目。

WinPcap编程

WinPcap编程

WinPcap编程

WinPcap是一个开源的、运行于Win32平台下的体系结构,它的主要功能是进行数据包捕获和网络分析。它允许应用程序通过协议栈捕获和传输网络数据包,也包括内核级别的数据包过滤、网络静态引擎和支持远程数据包捕获等有用的功能。

WinPcap由两部分组成:

1. 驱动程序: 扩展操作系统功能提供低层次的网络访问

2. 动态链接库:运行在Win32平台上的应用程序可以非常方便地访问网络低层次的数据。

Ethereal是大名鼎鼎的捕获数据包专业软件,它的运行是在WinPcap的支持之下的,如果没有安装WinPcap,Ethereal也无法正常捕获数据包。

在正式WinPcap编程之前,要配置运行环境。

Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:

wpcap.dll

Packet.dll

WanPacket.dll

pthreadVC.dll

这四个动态链接库在WinPcap驱动程序里。

如果没有这个驱动程序,需要到WinPcap官方网站上下载,下载地址为: 如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。

被过滤广告

也可以不安装WinPcap驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下

或者

接下来配置编程环境。

如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加pcap.h 包含文件(或者在引用的文件中),即#include “pcap.h”

也许会出现下面的错误:

fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory

第11讲 WinPCap

第11讲 WinPCap

pcap_if_t *alldevs,*d; int i=0; char errbuf[PCAP_ERRBUF_SIZE]; if (pcap_findalldevs(&alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } for(d=alldevs;d;d=d->next) { /* Print the list */ printf("%d. %s", ++i, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if(i==0){ printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return; } pcap_freealldevs(alldevs);
打开一个适配器开始捕获数据包
pcap_t * pcap_open_live ( const char * device, int snaplen, int promisc, int to_ms, char * ebuf ) pcap_t *adhandle= pcap_open_live(d->name, 65536,1, 1000, errbuf );

winpcap开发环境搭建

winpcap开发环境搭建

Winpcap开发环境搭建

1、安装WinPcap_4_1_3.exe

2、安装WinPcap开发包WpdPack_4_1_2.zip

3. 开发环境

●VC6

1)Tools->Options->Directories, 分别添加Include files和Libraries files目录

2)pcap-stdinc.h

#define _W64

4)Project->Settings->C/C++->Preprocessor definitions:

WPCAP, HAVE_REMOTE

5)Project->Settings->Link->Object/library modules:

wpcap.lib Packet.lib

或者在源代码文件中增加:

#pragma comment(lib, "wpcap.lib")

#pragma comment(lib, "Packet.lib")

●VS2010

1) 执行菜单栏“视图——其他窗口——属性管理器”,可以看到“属性管理器”显示在工作区左侧。如下图所示:

2) 双击Debug | Win32下的“er“,或者右键单击->Properties。在弹出的配置框中配置。这个设置是全局的,对所有工程有效。

VC++ Directiories -> Include Directories和Library Directories中添加路径。

假如将wpdpack放到c盘。则:

Include Directories:c:\wpdpack\Include;

Library Directories:c:\wpdpack\Lib;

【网络程序设计】winpcap网络开发库入门

【网络程序设计】winpcap网络开发库入门

【网络程序设计】winpcap网络开发库入门Phinecos(洞庭散人)

专注于开源技术的研究与应用 Winpcap网络开发库入门

Winpcap是一个强大的网络开发库,可以实现许多功能:获取可用的网络适配器;获取指定适配器信息(比如名称和描述信息);捕获指定网卡的数据封包;发送数据封包;过滤捕获的包以获取特定包等。

首先到下载安装winpcap 驱动和DLL组件。

然后到下载winpcap开发包,解压到指定目录,

这里我解压到C:\WpdPack_4_0_2\WpdPack,可以看到里面包含了:Lib,Include ,文档和

示例程序。

首先创建一个C++控制台程序,设置如下:

1) 在“Configuration Properties -> C/C++ ->

General”中,在Additional Include

Directories加入Include路径(“C:\WpdPack_4_0_2\WpdPack\Include”)。

2) 在 “Configuration Properties -> Linker -> General”

中,在Additional Library

Directories中加入 winpcap 库文件路

径 ( “C:\WpdPack_4_0_2\WpdPack\Lib” ) 。

WinPcap 原理技术

WinPcap 原理技术

WinPcap 原理技术

winpcap是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。

1、网络及协议分析

2、网络监控

3、通信日志记录

4、traffic generators

5、用户级别的桥路和路由

6、网络入侵检测系统(NIDS)

7、网络扫描

8、安全工具

WinPcap导入

WinPcap是一个开源的专业网络数据捕获开发包,其实,WinPcap的强大功能并不仅限于数据包的获取,主要功能:

捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;

在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;

在网络上发送原始的数据包;

收集网络通信过程中的统计信息。

Sniffer 嗅探原理

Winpcap是针对Win32平台上的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)

Packet.dll提供更方便更易用的编程接口,wpcap.dll中的接口函数

Sniffer嗅探器,是一种基于被动侦听原理的网络分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。

当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。Sniffer技术常常用于网络故障诊断、协议分析、应用性能分析和网络安全保障等各个领域。

WinPcap基础知识(第一课:获得设备列表)

WinPcap基础知识(第一课:获得设备列表)

WinPcap基础知识(第一课:获得设备列表)

一个基本的WinPcap应用程序所需的第一件事情是获得合适的网络适配器。Libpcap/ Winpcap提供pcap_findalldevs() 函数完成这个功能:这个函数返回一个相连的pcap_if结构的列表。列表的每一项包含关于适配器的复杂的信息。特别的,name和description域数据包含设备的名称和可读的描述。如下的代码提取设备列表,然后打印到屏幕上。如果没有发现适配器,则显示一个错误。

view plaincopy to clipboardprint?

#include <pcap.h>

void main()

{

pcap_if_t *alldevs;

pcap_if_t *d;

int i=0;

char errbuf[PCAP_ERRBUF_SIZE];

/* 取得本机的网络设备列表 */

if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* 这个参数在这里不需要 */, &alldevs, errbuf) == -1)

{

fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);

exit(1);

}

/* 显示列表 */

for(d= alldevs; d != NULL; d= d->next)

{

printf("%d. %s", ++i, d->name);

if (d->description)

printf(" (%s)\n", d->description);

WinPcap编程

WinPcap编程

WinPcap编程

WinPcap是一个开源的、运行于Win32平台下的体系结构,它的主要功能是进行数据包捕获和网络分析。它允许应用程序通过协议栈捕获和传输网络数据包,也包括内核级别的数据包过滤、网络静态引擎和支持远程数据包捕获等有用的功能。

WinPcap由两部分组成:

1. 驱动程序: 扩展操作系统功能提供低层次的网络访问

2. 动态链接库:运行在Win32平台上的应用程序可以非常方便地访问网络低层次的数据。Ethereal是大名鼎鼎的捕获数据包专业软件,它的运行是在WinPcap的支持之下的,如果没有安装WinPcap,Ethereal也无法正常捕获数据包。

在正式WinPcap编程之前,要配置运行环境。

Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:

wpcap.dll

Packet.dll

WanPacket.dll

pthreadVC.dll

这四个动态链接库在WinPcap驱动程序里。

如果应用程序出现一下提示,那就是没有安装驱动程序的原因了。

被过滤广告

也可以不安装WinPcap驱动程序。但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下

或者

接下来配置编程环境。

如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加pcap.h包含文件(或者在引用的文件中),即#include “pcap.h”

也许会出现下面的错误:

fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory

Winpcap编程

Winpcap编程

1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
4.数据结构 5.WinPcap编程
使用pcap.dll编程
1、获取设备列表
int pcap_findalldevs_ex (char * source, struct pcap_rmtauth * auth, pcap_if_t ** alldevs, char * errbuf )
WinPcap编程
内容提要
什么是WinPcap WinPcap的结构 WinPcap编程环境配置
数据结构
WinPcap编程
1.什么是WinPcap
1. 什么是WinPcap?
当应用程序需要访问原始数据包,即没有被操作系统 利用网络协议处理过的数据包时,socket无法满足需要, WinPcap为Win32应用程序提供这种访问方式。
3.1 WinPcap组成
NPF功能: 数据捕获 流量监测 数据发送 dump to disk
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
环境配置
VC6.0 环境下的配置
1. 到http://www.winpcap.org/devel.htm 下载安装 包 和 Developer's Pack. 2.安装驱动。 3.开发时,解压Developer's Pack,分别找到LIB 和 Include 目录。打开VC++,首先在 Tools=>Options=>Directories,分别配置 lib 和 Include 目录。当中Show Directories for 可以指定相应 的文件目录 4.VC++环境配置。 Project=>Settings=>Link=>Object/Library Modules 里面添加需要的LIB. (Packet.lib wpcap.lib ws2_32.lib)

WinpCap的详解(一)

WinpCap的详解(一)

WinpCap的详解(一)

首先来百科一下Winpcap是一个什么东东。Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。

它有如下几个功能:

1、捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据;

2、在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;

3、在网络上发送原始的数据包;

4、收集网络通信过程中的统计信息。

从上面的功能来看,这个库文件提供了许多的API函数,可以让我们捕获网络上的数据包以及统计网络通信的信息。为了更直观的反应这个库文件的作用,我们来看看利用这个库文件写出来的一个应用软件,wireshark。界面如下图所示,这个界面只是捕获数据的一个小界面,里面有很多的设置,有兴趣可以下载一个试试。他能统计在一个局域网的所有网络信息。

这里面重要一点,需要提醒的是:winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅

只是监听共享网络上传送的数据包。也就是说,WinpCap主要功能不能截取网络中的数据,他只能监听里面的数据。

对于WinpCap的结构以及原理,我们自然可以不用理会啦,我们只需要知道他的用途就行啦!

一、安装WinpCap

1、首先我们来看看如何安装WinpCap这个库,首先是下载WinpCap安装文件,这里有许多的版本,可以在官网上下载,,这里重点提醒一下,特别需要注意一下版本,如果你的版本是4.02,那么你的安装包也必须下载对应的版本,这里特别注意下,你可以下载当前比较稳定的版本。下载之后安装就ok啦!这里我用的是WinpCap4.02.

循序渐进学习使用WINPCAP八

循序渐进学习使用WINPCAP八

循序渐进学习使用WINPCAP(八)

尽管WinPcap从名字上来看表明它的主要目的是捕获数据包,但是它还为原始网络提供了一些其它的功能,其中之一就是用户可以发送数据包,这也就是本节的主要内容。需要指出的是原来的libpcap并不提供数据包的发送功能,这里所说的功能都是WinPcap的扩展功能,所以并不能够工作在UNIX下。

用pcap_sendpacket来发送一个数据包

下面的代码是一个最简单的发送数据的方法。打开一个适配器后就可以用pcap_sendpacket()来手工发送一个数据包了。这个函数需要的参数:一个装有要发送数据的缓冲区,要发送的长度,和一个适配器。注意缓冲区中的数据将不被内核协议处理,只是作为最原始的数据流被发送,所以我门必须填充好正确的协议头以便正确的将数据发送。#include "pcap.h"

int main(int argc, char **argv)

{

pcap_t *fp;

char error[PCAP_ERRBUF_SIZE];

u_char packet[100];

int i=0,inum;

pcap_if_t *alldevs,*d;

/* 获得网卡的列表*/

if (pcap_findalldevs(&alldevs, error) == -1)

{ fprintf(stderr,"Error in pcap_findalldevs: %s\n", error);

exit(1);

}

/* 打印网卡信息*/

for(d=alldevs; d; d=d->next)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WinPcap开发(一):零基础入门

*原创作者:追影人

0×00 前言

网络编程在网络安全方面具有举足轻重的作用,如何快捷高效的监听、分析、构造网络流量,成为很多安全从业者需要解决的重点问题。而winpcap这一免费开源项目恰好可以为win32应用程序提供访问网络底层的能力,所以其成为了相关网络编程的首选开发工具。

0×01 winpcap是什么?

winpcap(windows packet capture)是windows平台下一个免费的网络访问系统,可用于windows系统下的网络编程。著名的wireshark便是基于winpcap开发的,大家在安装wireshark中可以看到winpcap驱动程序的安装过程。

有关winpcap的介绍网络上很多,百科里面介绍的也很详细,我就不再copy了。需要注意的一点是,winpcap并不是一个简单的library,而是一个针对Win32平台上的抓包和网络分析的一个架构,它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)。所以它只能“嗅探”到物理线路上的数据包,而不具备拦截的能力,因此不适用于个人防火墙等项目。

0×02 你需要准备些什么?

本系列文章主要带大家认识和了解如何利用winpcap网络编程技术进行网络的协议分析、流量统计及网络探测扫描等,这里我们并不会去深硬的解读相关源代码,而是以轻松的方式结合实验来对相关原理进行深入理解。在本系列文章中,笔者从简到难,简明介绍winpcap架构原理、相关环境搭建及快速编写核心代码。但是在开始前,读者需要有一些相关基础:了解网络协议相关基础知识,掌握一门winpc ap开发库支持的编程语言,自己能动手实践编写一些例子。Winpcap提供的开发接口原生是c语言的,不过热心肠的程序猿们已经为其他语言的使用提供了封装,比如java、.net、python,好像连易语言都有。本系列文章将使用c语言来进行各种实验,有兴趣的读者可以将其转换成自己熟悉的语言来动手实践。

0×03 你能学到什么?

有关winpcap开发的文章在网上很容易找到,但是更多的都是对于代码的讲解,笔者在本文尽量系统性的从原理层面结合各个应用场景来介绍相关知识:

1. Winpcap获取网卡基本信息及收发数据包

2. 存活主机探测

3. 端口扫描

4. Arp欺骗

5. 中间人攻击的简单实现

6. 流量统计与分析

0×04 知识补充

进行下面的介绍前,我们需要了解几个名词的关系。

winpcap(windows packet capture)是windows平台下一个免费的网络访问系统,可用于windows系统下的网络编程。linux 平台下对应的开发包是libpcap。Wireshark是基于winpcap处理网络驱动层。

Wpdpack是winpcap的开发包,提供开发相关程序的接口。

0×05 环境准备

首先根据你所选择的开发语言选择对应的编译器,笔者使用c语言,利用VS2012进行相关开发。

安装好编译器后,进行相关配置。下载wpdpack点击这里

初学者可以选择里面的Examples进行编译,可以看到找不到头文件,及相关库。

这是因为wpdpack中的相关库还没有引入到编译环境中

将wpdpack包中的Include和lib文件夹中的文件添加到VS的相关目录下即可编译通过。将编译后的程序进行运行则出现以下错误。

这是由于运行时缺乏动态链接库导致,最简单的方法是直接下载并安装winpcap驱动程序下载

如果你觉得这样子很麻烦,也可以采用简易方法。程序在运行时只需要winpcap在syste m32下面释放的wpcap.dll和packet.dll,还有driver下面的npf.sys,所以不需要完整安装winpcap,而选择只复制以上三个文件到对应目录中即可。

本节笔者将采用著名的Arpspoof源码进行相关讲解,源码下载地址http://www.verysou /code/2287464_1/arpspoof.cpp.html

0×06 枚举可用网络适配器资源

在使用winpcap进行收发数据包时,需指定对应的网卡,所以有必要列出计算机上所有可用的网络适配资源。

列取网卡信息的核心代码:

科普Tips:

“网卡”是神马?

计算机与外界局域网的连接是通过主机箱内插入一块网络接口板(或者是在笔记本电脑中插入一块PCMCIA卡)。网络接口板又称为通信适配器或网络适配器(network adapter)或网络接口卡NIC(Network Interface Card),但是更多的人愿意使用更为简单的名称“网卡”。

利用上面的程序,我们可以查看计算机上可利用的所有网卡资源,以便选择相应的网卡资源进行相关操作。为了便于观察,我们在VMware虚拟机中进行,首先在对应的虚拟机设置中增加硬件选项中添加多块网卡,然后配置相应的IP,运行程序,可以得到对应网卡的名称描述、IP地址、MAC地址等。

0×07 如何构造和发送数据包

上一步我们列出了所有的可用网卡资源,在发送数据包前,需要打开对应的网卡来进行发送数据包的操作。这里使用的函数是pcap_open_live:

函数名称:pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)

函数功能:获得用于捕获网络数据包的数据包捕获描述字。

参数说明:device参数为指定打开的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定是否将网络接口置于混杂模式。to_ms参数指定超时时间(毫秒)。ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消息。

相关文档
最新文档