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

合集下载

使用winpcap的主要流程

使用winpcap的主要流程

使用winpcap的主要流程1. 安装winpcap
•下载winpcap安装包
•运行安装程序
•按照提示完成安装过程
2. 创建WinPcap的应用程序
•引用WinPcap的头文件
•在应用程序中初始化WinPcap
•打开网络适配器
•设置过滤器条件
3. 捕获网络数据包
•创建一个数据包捕获句柄
•设置过滤器条件(可选)
•进入捕获循环
–清空数据包缓冲区
–捕获一个数据包
–处理捕获到的数据包
4. 处理捕获到的数据包
•解析数据包的头部信息
•进行数据包的分析和处理
•可选地将数据包写入文件或发送数据包5. 关闭数据包捕获
•关闭数据包捕获句柄
•释放资源
•结束应用程序
6. WinPcap的高级用法
•配置超时和非阻塞模式
•对多个适配器进行操作
•同时捕获多个数据流
•进行软件过滤器和内核过滤器
•设置数据包缓冲区大小
•错误处理和异常情况处理
7. 示例代码
下面是一个使用WinPcap进行数据包捕获的示例代码:
```c #include <stdio.h> #include <pcap.h>
int main() { char errbuf[PCAP_ERRBUF_SIZE]; pcap_t handle; const u_char packet; struct pcap_pkthdr header;
// 打开网络适配器
handle = pcap_open_live(\。

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

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

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,好像连易语言都有。

WinPcap 教程

WinPcap 教程

WinPcap 教程: 循序渐进教您使用WinPcap本节将向您展示如何使用WinPcap API的一些特性。

这部分教程细化成若干节课,以循序渐进的方式介绍给读者,让读者从最基本的部分(获得设备列表)到最复杂的部分(控制发送队列并收集和统计网络流量)来了解如何使用WinPcap进行程序开发。

有时,我们会给出一些简单使用的代码片断,但同时,我们提供完整程序的链接:所有的源代码包含一些指向手册其他地方的链接,这可以让您很方便地通过点击鼠标来跳转到您想查看的函数和数据结构的内容中去。

范例程序都是用纯C语言编写, 所以,掌握基本的C语言编程知识是必须的,而且,这是一部关于处理原始网络数据包的教程,因为,我们希望读者拥有良好的网络及网络协议的知识。

用Microsoft Visual C++ 创建一个使用wpcap.dll 的应用程序,需要按一下步骤:∙在每一个使用了库的源程序中,将pcap.h 头文件包含(include)进来。

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

(工程->设置->c/c++->预处理程序定义中添加WPCAP)∙如果你的程序使用了WinPcap的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE。

不要直接把remote-ext.h直接加入到你的源文件中去。

(工程->设置->c/c++->预处理程序定义中添加HAVE_REMOTE)∙设置VC++的链接器(Linker),把wpcap.lib库文件包含进来。

wpcap.lib可以在WinPcap 中找到。

∙设置VC++的链接器(Linker),把ws2_32.lib库文件包含进来。

这个文件分布于C的编译器,并且包含了Windows的一些socket函数。

本教程中的一些范例程序,会需要它。

获取设备列表通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。

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 结构体,这个结构体由如下元素组成:
通过返回的结构,我们可以得到探测到的网卡设备的更 详尽信息。
例子:
二、打开适配器开始捕获数据包
现在,我们已经知道如何获取适配器的信息了,那我们就开始 一项更具意义的工作,打开适配器并捕获数据包。本节中,我们会 编写一个程序,将每一个通过适配器的数据包打印出来。

Sniffer,中文可以翻译为嗅探器,是一种基于被动侦听原理的网络 分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况 以及网络上传输的信息。当信息以明文的形式在网络上传输时,便可 以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便 可以将网上传输的源源不断的信息截获。 wireshark(2006年之前称为Ethereal)一是全球相当行流行的开放 源代码的网络协议分析软件,功能强大而且支持平台最多,它可以实 时检测网络通讯数据,也可以检测其抓取的网络通讯数据快照文件;可 以通过图形界面浏览这些数据,可以查看网络通讯数据包中每一层的 详细内容;Wireshark还拥有许多强大的特性:包含有强显示过滤器语 言和查看TCP会话重构流的能力。它可以支持七百多种协议的解析和 多种媒体类型。

第7章 Winpcap编程技术

第7章 Winpcap编程技术

PacketSetHwFilter() 设置接收模式(一般设置为混杂模式) 设置接收模式(一般设置为混杂模式) PacketSetBpf() PacketSetBuff() 编辑设置过滤规则 设置核心缓冲区大小
PacketSetReadTimeout() 设置读操作等待时间 PacketAllocatePacket() 设置(分配)用户缓冲区 设置(分配) PacketInitPacket() PacketReceivePacket() 初始化
Winpcap的各个组成部分
6
常州大学信息学院
网络编程
1、NPF驱动
网络数据包过滤器(Netgroup Filter, NPF)是Winpcap的核心部分。它处理网络 上传输的数据包,并且对用户级提供捕获、 发送和分析等功能。 NPF是一个协议驱动,它包括Network Tap和Packet Filter两个主要部件。
30
常州大学信息学院
网络编程
3、接口数据结构
struct pcap_if { struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; u_int flags; };
31
常州大学信息学院
网络编程
10
常州大学信息学院
网络编程
2、typedef struct _PACKET *LPPACKET
描述一组网络数据包的结构。它包含 了以下几个域: OVERLAPPED OverLapped PVOID Buffer UINT Length PVOID ulBytesReceived BOOLEAN bIoComplete
发送一个或多个数据报的副本。

WinPcap基础

WinPcap基础

SUP-5.1.3
网络组包过滤(NPF)模块
1.数据包的捕获和过滤 捕获数据库是WinPcap的核心技术。在捕 获时,驱动器使用网络接口嗅探数据包 ,并把它们完整地传送到用户层应用程 序。 可以看到,捕获数据包时使用了两个组 件,即过滤器和核心缓冲区。
2.监测和统计
NPF中包含一个可编程的监测模块,它可以对网络流量 进行简单的统计和计算。不需要把数据包复制到用户 层应用程序,只要简单地接收和显示从监测引擎获得 的结果即可收集到统计信息。不需要捕获数据包,也 就避免了捕获过程中可能耗费的CPU和内存资源。 监测引擎由一个带有计数器的分类器构成。NPF中的一 个过滤引擎对数据包进行分类,没有被过滤掉的数据 会进入计数器。计数器拥有一些变量,用于保存接收 到的数据和过滤器接收的字节数。每当有新的数据包 进入时,这些变量的值都会被更新。监测引擎会定期 将这些变量的值传递给用户层应用程序,传递的时间 可以由用户自行配置。
以简洁方式来描述WinPcap体系结构
SUP-5.1.2
NIC驱动器和NDIS
网络接口卡和NIC驱动器 中间层驱动器 传输驱动器或者协议驱动器
1.网络接口卡和NIC驱动器
NIC驱动器可以直接管理网络接口卡。它的下端接口与硬 件关联,而其上端接口允许高层向网络中发送数据包、处 理中断、重置网络适配器、中止网络适配器以及查询和设 置驱动器的操作属性。NIC驱动器可以是微端口,也可以 是传统的完全NIC驱动器。 微端口仅实现硬件指定的、用于管理网络适配器的必 要操作,包括在网络适配器上发送和接收数据。大多 数最低层NIC驱动器的操作(例如同步操作)都是由 NDIS操作的。微端口不会直接调用操作系统例程, NDIS是微端口访问操作系统的接口。微端口将数据包 传送到NDIS,而NDIS确保这些数据包会传送给正确的 网络协议。 完全NIC驱动器用于执行硬件指定的操作以及所有由 NDIS完成的同步和队列操作。

第11讲 WinPCap

第11讲 WinPCap

过滤数据包
int pcap_compile ( pcap_t * p, struct bpf_program * fp, char * str, //过滤表达式 int optimize, bpf_u_int32 netmask ) //掩码 int pcap_setfilter ( pcap_t * p, struct bpf_program * fp ) pcap_compile() 编译一个包过滤器。将一个高级的、布尔形式表 示的字符串转换成低级的、二进制过滤语句,以便被包驱动使用。 pcap_setfilter() 在核心驱动中将过滤器和捕获过程结合在一起。从 这一时刻起,所有网络的数据包都要经过过滤,通过过滤的数据 包将被传入应用程序。
打开一个适配器开始捕获数据包
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 );
解析数据包
不同的网络使用不同的链路层协议,不知道网络类型就无法定位数 据帧(frame) ,所以,首先使用如下函数对网络类型进行判断: int pcap_datalink ( pcap_t *p ) 它返回适配器的链路层标志,例如DLT_EN10MB表示以太网(10Mb, 100Mb,1000Mb及以上),DLT_IEEE802表示令牌环网。可以在设 置过滤条件之前先对各个设备的网络类型进行探测,以获知物理层 的数据帧格式,接下来就可以针对不同的帧格式解析出封装在其中 的报文(packet),例如IP报文,继而拆封IP报文得到TCP或者UDP 等报文,再深层次的拆封就是应用程序数据了。

Winpcap 程序员手册

Winpcap 程序员手册

Winpcap 程序员手册Packet.dll API :程序员手册1.介绍PACKET.DLL 是一个动态连接库。

它提供了一套面向用户的包捕捉驱动程序接口。

这套动态连接库实现了一系列的函数,使得用户与驱动器的通信变得更为简便。

这避免了在用户程序中使用系统调用或控制输入/输出设备驱动模式(IOCTLs)。

而且,这套动态连接库还提供了网络适配器控制函数,对网络上捕获的数据包进行读取/写入函数,在驱动器中设置缓冲区和过滤器函数等等。

目前,有两个版本的PACKET.DLL:第一个适用于Windows95/98,第二个版本适用于WindowsNT/2000。

这两个版本都提供了相同的应用程序接口,这使得编写独立于系统的包捕获应用程序变得更为容易。

通过调用PACKET.DLL API,同一个应用程序可不做任何修改就在Windows95/98/NT/2000环境下运行。

本手册讲述了如何使用PACKET.DLL,并详细讲解这套动态连接库提供的函数和数据结构。

2.PACKET.DLL 与wpcap的比较如果你要编写一个没有特别/底层要求的包捕获应用程序,推荐使用wpcap.dll的函数,这是包捕获库(libpcap)的一个扩展集,而不是本章节中讨论的API。

在wpcap.dll中也使用PACKET.DLL的函数。

但wpcap.dll提供了一个更强大、更直接、更简洁的编程环境。

通过使用wpcap.dll,诸如捕获包、创建一个包过滤器或者在文件中保存dump 这些操作会被准确地执行并使程序变得直观。

Libpcap能够为一个标准的网络监听或嗅探程序提供所有需要的函数。

而且,利用libpcap编写的程序也能在UNIX平台上进行编译,这是因为这个库的Win32版本和UNIX版本有很好的兼容性。

然而,PACKET.DLL API 有一些libpcap没有提供的可能的操作。

Libpcap相对简单,它提供了一套系统无关的捕获包的API。

winpcap开发环境搭建

winpcap开发环境搭建

Winpcap开发环境搭建1、安装WinPcap_4_1_3.exe2、安装WinPcap开发包WpdPack_4_1_2.zip3. 开发环境●VC61)Tools->Options->Directories, 分别添加Include files和Libraries files目录2)pcap-stdinc.h#define _W644)Project->Settings->C/C++->Preprocessor definitions:WPCAP, HAVE_REMOTE5)Project->Settings->Link->Object/library modules:wpcap.lib Packet.lib或者在源代码文件中增加:#pragma comment(lib, "wpcap.lib")#pragma comment(lib, "Packet.lib")●VS20101) 执行菜单栏“视图——其他窗口——属性管理器”,可以看到“属性管理器”显示在工作区左侧。

如下图所示:2) 双击Debug | Win32下的“er“,或者右键单击->Properties。

在弹出的配置框中配置。

这个设置是全局的,对所有工程有效。

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

假如将wpdpack放到c盘。

则:Include Directories:c:\wpdpack\Include;Library Directories:c:\wpdpack\Lib;3)C/C++->Preprocessor(预处理器)->Preprocessor Definitions(预处理定义):添加WPCAP;HAVE_REMOTE;4) 链接器->输入->附加依赖项:添加wpcap.lib; Packet.lib;或者在源代码文件中增加:#pragma comment(lib, "wpcap.lib")#pragma comment(lib, "Packet.lib")。

使用Winpcap开发网络数据包分析器

使用Winpcap开发网络数据包分析器




















I…

实用第一 智慧密集
使 用 Wip a n cp开发 网络数据包分析器
江 洪
摘 要 :使 用 W ip a n cp开 发 包 实现 了一 个 网 络 数 据 包 分 析 器 。 该 分 析 器 可 以 捕 获 UDP或 T P数 C
据 包,并对数 据 包头进 行 分析。
表 3 I 头 结构 表 P
名称 版本 号 长度 4位 4表 示这 是 IV4 . P 说明
表 4和表 5所 示 。
协议 。数 据包 是 进 行 网 络数 据 通 信 的基 本 单 位 。每块 数据 都 包
含 在 数 据 包 中 。 数 据包 中 ,除 了 数据 本 身外 , 还有 数 据 包 头 。
表 2 PPP OE 结 构 表
名 称 版本 号 类型 代 码 长 度 4位 4位 8位 设为 1 设为 I 设为0 说 明
目的 端 u
U DP长度 U DP校验 和
表 5 TCP 结构 表
名称 源端 L J 长度 J 6位 说明 表示数 据 包m哪 个端 u发 出
表 1 以 太 头 结 构 表
名称 长度 说 明 k 层 议 I P校验 和 源 l 址 P地 8位 1 6位 3 2位
l ,如 该值降 为 0就 会破 抛弃
本 文H涉 及 0 H T P和 1H. P这 两种 6.C I UD 校验 I 数据 是 正确 P头 表 示数据 包是 f 哪 个 I j = { P地址 发 出的 表 示数据 包磷 发给 哪个 l 址 P地

【网络程序设计】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开发〔一〕:零基础入门*原创追影人0×00 前言网络编程在网络安全方面具有举足轻重的作用,如何快捷高效的监听、分析、构造网络流量,成为很多安全从业者需要解决的重点问题.而winpcap这一免费开源项目恰好可以为win32应用程序提供访问网络底层的能力,所以其成为了相关网络编程的首选开发工具.0×01 winpcap是什么?winpcap<windows packet capture>是windows平台下一个免费的网络访问系统,可用于windows系统下的网络编程.著名的wireshark便是基于winpcap开发的,大家在安装wireshark中可以看到winpcap驱动程序的安装过程.有关winpcap的介绍网络上很多,百科里面介绍的也很详细,我就不再copy了.需要注意的一点是,winpcap并不是一个简单的library,而是一个针对Win32平台上的抓包和网络分析的一个架构,它包括一个核心态的包过滤器,一个底层的动态库〔packe t.dll〕和一个高层的不依赖于系统的库〔wpcap.dll〕.所以它只能"嗅探"到物理线路上的数据包,而不具备拦截的能力,因此不适用于个人防火墙等项目.0×02 你需要准备些什么?本系列文章主要带大家认识和了解如何利用winpcap网络编程技术进行网络的协议分析、流量统计与网络探测扫描等,这里我们并不会去深硬的解读相关源代码,而是以轻松的方式结合实验来对相关原理进行深入理解.在本系列文章中,笔者从简到难,简明介绍winpcap架构原理、相关环境搭建与快速编写核心代码.但是在开始前,读者需要有一些相关基础:了解网络协议相关基础知识,掌握一门winpcap开发库支持的编程语言,自己能动手实践编写一些例子.Winpcap提供的开发接口原生是c语言的,不过热心肠的程序猿们已经为其他语言的使用提供了封装,比如java、.net、p ython,好像连易语言都有.本系列文章将使用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在system32下面释放的wpcap.dll和packet.dll,还有driver下面的npf.sys,所以不需要完整安装winp cap,而选择只复制以上三个文件到对应目录中即可.本节笔者将采用著名的Arpspoof源码进行相关讲解,源码下载地址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, intsnaplen, intpromisc, i ntto_ms, char *ebuf>函数功能:获得用于捕获网络数据包的数据包捕获描述字.参数说明:device参数为指定打开的网络设备名.snaplen参数定义捕获数据的最大字节数.promisc指定是否将网络接口置于混杂模式.to_ms参数指定超时时间〔毫秒〕.ebuf参数则仅在pcap_open_live<>函数出错返回NULL时用于传递错误消息.返回值:打开的网卡句柄Arpspoof中将网卡的打开操作进行了如下封装,调用时直接输入网卡序号即可,程序会对参数2、3、4进行初始化设置:使用范例:在获取到网卡句柄并打开后,发送数据包就很容易了ucFrame是封装好的数据包,ucFrameLen为数据包的长度.下面我们封装一个例子,使用上述代码发送ARP请求包,用于查询某IP对应的MAC地址. ARP协议格式关键代码启动wireshark进行监听,运行程序,我们可以看到如下结果,程序发出了一个ARP广播包,用于查询192.168.0.2的主机MAC,并且目标机在收到该查询包后,进行了回复,将自己的MAC 地址告诉了查询发起的机器.0×08如何监听分析数据包在监听数据包时,使用的关键函数为pcap_loop函数名称:intpcap_loop<pcap_t * p,intt, pcap_handler callback, uchar * u ser>;参数说明:p 是由pcap_open_live<>返回的所打开的网卡的指针;t用于设置所捕获数据包的个数;callback 是回调函数,其原型为pcap_callback<u_char* argument,conststructp cap_pkthdr* packet_header,constu_char* packet_content>;user值一般为NULL结合上面的代码,我们在获得并打开网卡句柄adhandle,使用下面的代码并可捕获数据包程序在每一个数据包到来时,都会自动调用回调函数packet_handler来对数据包进行处理,其第三个参数便是数据包内容.上图为运行结果图,可以看到每一个数据包的时间戳信息,和长度信息.值得注意的是,原始套接字也可以完成数据包的发送和监听工作,但是与winpcap相比,在监听数据包方面是有区别的,由于winpcap更接近与底层,所以在混杂模式下,凡是到达网卡的数据包不管目的地址是否为自身主机,winpcap均能接收到;而原始套接字只能接收到投送给自己的数据包.0×09 总结与预告本章中我们简单认识了winpcap的相关基础知识,学习了发送数据包和接收数据包的方法,其实不难发现,发送和接收数据包的过程都比较简单,只需要调用相关库函数即可,而更多的精力在数据包的组织和拆分上,同时在一些场景中,算法的使用也较为重要.在接下来的章节中,我们会看到下面的内容:1.扫描存活主机2.Arp欺骗的实现与应用3.端口扫描4.流量监控与统计分析。

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);elseprintf(" (No description available)\n");}if (i == 0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return;}/* We don't need any more the device list. Free it */pcap_freealldevs(alldevs);}#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);elseprintf(" (No description available)\n");}if (i == 0){printf("\nNo interfaces found! Make sure WinPcap is installed.\n");return;}/* We don't need any more the device list. Free it */pcap_freealldevs(alldevs);}在第一行#include <pcap.h>的前面加上#define HAVE_REMOTE,或者你在项目属性里面添加“C语言预处理程序定义”一栏里面加上HAVE_REMOTE(注意用‘,’隔开)。

WinPcap编程

WinPcap编程

WinPcap编程WinPcap是一个开源的、运行于Win32平台下的体系结构,它的主要功能是进行数据包捕获和网络分析。

它允许应用程序通过协议栈捕获和传输网络数据包,也包括内核级别的数据包过滤、网络静态引擎和支持远程数据包捕获等有用的功能。

WinPcap由两部分组成:1. 驱动程序: 扩展操作系统功能提供低层次的网络访问2. 动态链接库:运行在Win32平台上的应用程序可以非常方便地访问网络低层次的数据。

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

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

Win32 平台下WinPcap应用程序需要以下四个动态链接库才能正常运行:wpcap.dllPacket.dllWanPacket.dllpthreadVC.dll这四个动态链接库在WinPcap驱动程序里。

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

被过滤广告也可以不安装WinPcap驱动程序。

但是需要把上面提到的四个动态链接库文件拷贝到系统分区/WINDOWS/system32目录下或者接下来配置编程环境。

如果一个源文件使用了WinPcap提供的库函数,那么就需要在该文件开始的位置添加pcap.h包含文件(或者在引用的文件中),即#include “pcap.h”也许会出现下面的错误:fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory这个错误表明找不到pcap.h文件这个头文件在驱动程序安装完成后也是没有的,它是开发包里面的一个头文件所以,如果要运行程序还需要到官方网站上去下载WinPcap SDK―WpdPackWinPcap SDk里面包含库文件,头文件,文档文件和一些例子。

解压缩后把Include目录添加到IDE的包含文件中(VC6.0 Tools->Option->Directory; VS 2003/2005 工具->选项->项目和解决方案/项目->VC++目录)error LNK2019: 无法解析的外部符号_pcap_findalldevs_ex,该符号在函数XXX 中被引用如果发生上面的错误就表明缺少库文件,需要添加wpcap.lib到工程中(VC6.0 Project->Settings->Link->Object/library modules; VS 2003/2005 项目->添加现有项->所有文件)error C2065: “PCAP_SRC_IF_STRING”: 未声明的标识符error C3861: “pcap_findalldevs_ex”: 找不到标识符error C2065: “PCAP_OPENFLAG_PROMISCUOUS”: 未声明的标识符error C3861: “pcap_open”: 找不到标识符新的版本里WinPcap支持远程数据包获取,发生上面的错误很有可能是新的版本导致不兼容的问题,所以还应当添加一个头文件remote-ext.h ,即#include "remote-ext.h"如果还有问题,可以到WinPcaP官方网站上找FAQ。

Winpcap编程

Winpcap编程
设备驱动 ---数据捕获 ---数据发送 ---可编程的过滤系统 ---监听引擎 ---……
接口
3.1 WinPcap组成--Packet.dll
packet.dll(Packet Driver
API) 提供了一个底层的API访问接 口,可以直接访问网卡,为win32 平台提供了一个公共的接口。
3.1 WinPcap组成
NPF功能: 数据捕获 流量监测 数据发送 dump to disk
1.什么是WinPcap
2.WinPcap的结构
3.WinPcap编程环境配置
环境配置
VC6.0 环境下的配置
1. 到/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)
在同一下拉框中找到“库文件”,然后对应到开发包的lib目录;
设置编译条件;在项目属性页中:
配置属性->C/C++->预处理器->预处理器定义,增加 ;WPCAP;HAVE_REMOTE;每 一个预定义符用";"隔开; 在项目属性页中:配置属性->链接器->命令行->附加选项对应的文本 框中增加:“wpcap.lib ws2_32.lib”;

Winpcap使用介绍

Winpcap使用介绍

Winpcap使用介绍1. Winpcap简介Winpcap(windows packet capture)是在Win32平台上的强大的、有较好扩展性的底层网络分析体系结构,是Unix下的lipbcap移植到windows下的产物,是Win32环境下数据包捕获的开放代码函数库。

Winpcap是第一个Win32开放式的捕获包的体系结构,能够支持大多数应用程序的需要。

如图A-1所示,Winpcap包含了一个内核级的数据包过滤器——NPF (Netgroup Packet Filter)、一个底层动态链接库(Packet.dll)和一个高层的独立于系统的库(Wpcap.dll)。

这三个模块中,NPF属于内核级,其他两模块属于用户级。

图A-1 Winpcap的结构图NPF模块过滤数据包,将数据包不做任何改动的传递给用户,它还包含了一些操作系统专用代码(如:时间戳管理)。

Packet.dll模块提供了Win32平台下的捕获包的驱动接口。

实际上,不同版本的Windows 都提供了不同的内核模块和应用程序之间的接口函数,Packet.dll有一套独立于系统的API 来处理这些差异。

基于Packet.dll编写的程序可以不经过重新编译就在各种Win32平台下实现捕获数据包。

Packet.dll还包含了其他一些函数。

它可以进行一些底层的操作,Packet.dll和NPF都依赖于操作系统,并且由于Windows95/98和WindowsNT/2000之间操作系统结构的不同而在不同版本的操作系统上有所不同。

Wpcap.dll库不依赖于操作系统,并且它包含了一些其它高层的函数,比如:过滤器生成器、用户定义的缓冲区和高层特性(数据统计和构造数据包)。

Winpcap提供的功能包括四个方面:1)捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;2)在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3)在网络上发送原始的数据包;4)收集网络通信过程中的流量信息。

WinpCap的详解(一)

WinpCap的详解(一)

WinpCap的详解(一)首先来百科一下Winpcap是一个什么东东。

Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。

它有如下几个功能:1、捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据;2、在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3、在网络上发送原始的数据包;4、收集网络通信过程中的统计信息。

从上面的功能来看,这个库文件提供了许多的API函数,可以让我们捕获网络上的数据包以及统计网络通信的信息。

为了更直观的反应这个库文件的作用,我们来看看利用这个库文件写出来的一个应用软件,wireshark。

界面如下图所示,这个界面只是捕获数据的一个小界面,里面有很多的设置,有兴趣可以下载一个试试。

他能统计在一个局域网的所有网络信息。

这里面重要一点,需要提醒的是:winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。

也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。

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

对于WinpCap的结构以及原理,我们自然可以不用理会啦,我们只需要知道他的用途就行啦!一、安装WinpCap1、首先我们来看看如何安装WinpCap这个库,首先是下载WinpCap安装文件,这里有许多的版本,可以在官网上下载,,这里重点提醒一下,特别需要注意一下版本,如果你的版本是4.02,那么你的安装包也必须下载对应的版本,这里特别注意下,你可以下载当前比较稳定的版本。

下载之后安装就ok啦!这里我用的是WinpCap4.02.2、下载WinpCap Develop's Packs,这里我也提供相同的版本WpdPack4.02.3、解压后会得一个目录WpdPack四个子目录:docsExamples-pcapExamples-remoteIncludeLib然后配置VC++tools --> options --> Projects and Solutions --> VC++ Directories :Include files :WpdPackPath\includeLibrary files:WpdPackPath\lib4、经过上面的步骤之后,你的WinpCap应该就安装成功啦,之后就是运行一下里面提供的例程啦,如果有什么问题,就对应的把问题在网上查一查,总体来说有以下几个问题:第一个就是需要在工程的链接库上添加wpcap.lib链接库;第二个就是你的SDK太老了,需要添加更新你的SDK,相应的到官方网站上下载适合你电脑的SDK。

Winpcap使用

Winpcap使用

Winpcap使⽤前⾔随着⽹络⼊侵的不断发展,⽹络安全变得越来越重要,于是⽹络⼊侵取证系统的研究也变得⽇益重要。

在⽹络⼊侵取证系统中,对⽹络上传送的数据包进⾏有效的监听即捕获包是⽬前取证的关键技术,只有进⾏⾼效的数据包捕获,⽹络管理员才能对所捕获的数据进⾏⼀系列的分析,从⽽进⾏可靠的⽹络安全管理。

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是不依赖于操作系统的。

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

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

循序渐进学习使用WINPCAP(一)一些需要知道的细节描述(前言):这一部分展示了如何使用WINPCAP-API的不同的功能,它作为一个使用指南被划分为一系列的课时来带领读者循序渐进的体会PCAP的程序设计的魅力:从简单的基本功能(如获取网卡的列表,数据包的捕获等)到统计和收集网络流量等高级功能。

在这里将提供一些简单但完整的代码作为参考:所有的这些原代码都有和它相关的详细信息的连接以便单击这些功能和数据结构时能够即使跳转到相关的文献。

这些例子是用C语言写的,所以在学习之前首先要有一定的C语言的基础,当然PCAP作为一个网络底层的驱动,要想学好它也必须具备一定的网络方面的知识。

(一)得到网络驱动列表用PCAP写应用程序的第一件事往往就是要获得本地的网卡列表。

PCAP提供了pcap_findalldevs()这个函数来实现此功能,这个API返回一个pcap_if结构的链表,链表的每项内容都含有全面的网卡信息:尤其是字段名字和含有名字的描述以及有关驱动器的易读信息。

得到网络驱动列表的程序如下:#include "pcap.h"main() {pcap_if_t *alldevs;pcap_if_t *d;int i=0;char errbuf[PCAP_ERRBUF_SIZE];/* 这个API用来获得网卡的列表*/if (pcap_findalldevs(&alldevs, errbuf) == -1) {fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);exit(1);}/* 显示列表的响应字段的内容*/for(d=alldevs;d;d=d->next) {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;}/* We don't need any more the device list. Free it */pcap_freealldevs(alldevs);}有关这段程序的一些说明:首先pcap_findalldevs()同其他的libpca函数一样有一个errbuf参数,当有异常情况发生时,这个参数会被PCAP填充为某个特定的错误字串。

  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源码进行相关讲解,源码下载地址.verysource./code/2 287464_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时用于传递错误消息。

返回值:打开的网卡句柄
Arpspoof中将网卡的打开操作进行了如下封装,调用时直接输入网卡序号即可,程序会对参数2、3、4进行初始化设置:
使用例:
在获取到网卡句柄并打开后,发送数据包就很容易了
ucFrame是封装好的数据包,ucFrameLen为数据包的长度。

下面我们封装一个例子,使用上述代码发送ARP请求包,用于查询某IP对应的MAC地址。

ARP协议格式
关键代码
启动wireshark进行监听,运行程序,我们可以看到如下结果,程序发出了一个ARP广播包,用于查询192.168.0.2的主机MAC,并且目标机在收到该查询包后,进行了回复,将自己的MAC地址告诉了查询发起的机器。

0×08 如何监听分析数据包
在监听数据包时,使用的关键函数为pcap_loop
函数名称:int pcap_loop(pcap_t * p,int cnt, pcap_handler callback, uchar * user);
参数说明:
p 是由pcap_open_live()返回的所打开的网卡的指针;
cnt用于设置所捕获数据包的个数;
callback 是回调函数,其原型为pcap_callback(u_char* argument,const struct pcap_pkthdr* packet_header,const u_char* packet_content)
;user值一般为NULL
结合上面的代码,我们在获得并打开网卡句柄adhandle,使用下面的代码并可捕获数据包
程序在每一个数据包到来时,都会自动调用回调函数packet_handler来对数据包进行处理,其第三个参数便是数据包容。

上图为运行结果图,可以看到每一个数据包的时间戳信息,和长度信息。

值得注意的是,原始套接字也可以完成数据包的发送和监听工作,但是与winpcap相比,在监听数据包方面是有区别的,由于winpcap更接近与底层,所以在混杂模式下,凡是到达网卡的数据包不管目的地址是否为自身主机,winpcap均能接收到;而原始套接字只能接收到投送给自己的数据包。

0×09 总结与预告
本章中我们简单认识了winpcap的相关基础知识,学习了发送数据包和接收数据包的方法,其实不难发现,发送和接收数据包的过程都比较简单,只需要调用相关库函数即可,而更多
的精力在数据包的组织和拆分上,同时在一些场景中,算法的使用也较为重要。

在接下来的章节中,我们会看到下面的容:
1.扫描存活主机
2.Arp欺骗的实现与应用
3.端口扫描
4.流量监控与统计分析。

相关文档
最新文档