WinPcap编程渐进教程(中文)

原创 2004年10月27日 23:34:00
WinPcap 教程
原文出处:http://winpcap.polito.it/docs/man/html/index.html

作者:
Loris Degioanni (degioanni@polito.it), NetGroup, Politecnico di Torino
http://winpcap.polito.it

译者:
记忆碎片 (val_cong@htomail.com)
http://www.s8s8.net

概述:
这篇教程将会指引读者逐步了解WinPcap编程, 从简单的基础函数(获取网络接口列表, 捕捉数据包)到更高级的内容(处理发送队列, 网络流量统计). 教程中包括一些代码片断, 以及一些简单但完整的例子, 读者可以参考这些例子更好的理解教程的内容. 这些例子全部用C语言写成, 所以基本的C语言编程知识是必要. 同时, 因为这篇教程的内容是与底层网络紧密相连的, 所以笔者假设读者已经具备有关网络和协议的相关知识.

译者的话:
WinPcap是一套免费的, 基于Windows的网络接口API, 它在底层网络操作方面对程序员很有帮助. 这篇文档翻译自 "WinPcap Documentation 3.0" 中的 "WinPcap tutorial: a step by step guide to program WinPcap" 一部分. 这篇教程对初学者的帮助很大, 尤其是简短清晰的例子, 但这篇教程只是整个文档的一小部分, 我认为你仍然需要参考文档的其它部分来了解各种结构等信息. 教程中注有前缀 "Y-" 的部分是译者为了让读者更明白作者的意思添加的, 原文中没有.

1. 获取网络接口列表

通常, 一个基于WinPcap的应用程序所要做的第一件事, 就是获得适合的网络接口的列表. Libpcap中的pcap_findalldevs()函数就是干这活的: 这个函数然回一个pcap_if结构的列表, 每个元素都记录了一个接口的信息. 其中, name和description以人类可以阅读的形式, 记录了设备的信息.
下面的源代码输出可用的网络接口的列表, 并且在没有找到任何借口的情况下输出错误信息:
#include "pcap.h"
main()
{
pcap_if_t *alldevs;
pcap_if_t *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)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)/n", d->description);
else
/* Y- 没有有效的描述 */
printf(" (No description available)/n");
}

if(i==0)
{
/* Y- 没有有效的接口, 可能是因为没有安装WinPcap */
printf("/nNo interfaces found! Make sure WinPcap is installed./n");
return;
}

/* 我们不再需要列表了, 释放 */
pcap_freealldevs(alldevs);
}


我们来看看这段代码.

首先, 和其他的libpcap函数一样, pcap_findalldevs(), 有一个错误缓冲区(errbuf)参数. 这个参数是一个字符串指针, 一旦发生错误,libpcap将会在这里填入错误描述. 然后, 请注意, pcap_findalldev系统下的s()函数同时也被UNIX下的libpcap所支持, 但是并不是所有的操作系统都支持"网络接口描述"(description)这一项. 所以, 如果我们想写一个可以移植的的应用程序,那么我们必须要为描述为"空"(null)的情况做好准备:遇到这种情况我们就输出一个"没有有效的描述"的消息.

最后我们通过pcap_freealldevs()函数来释放接口列表.

现在让我们编译并运行我们的第一个WinPcap程序. 如果你使用UNIX或者Cgywin的话, 你只需要以下命令:

gcc -o testaprog testprog.c -lpcap

在Windows环境中(Y - 如果你使用Microsoft Visual C++), 你需要建立一个工程, 按照"Using WinPcap in your programs " 一节中说明来做.
不过, 我仍然建议你参照Winpcap开发者包(WinPcap developer's pack)中的例子, 那些例子包括了所以配置完善的工程, 以及全部你所需要的库和包含文件.
(Y - 你可以在本章最后找到Microsoft Visual C++ 的配置方法)

假设现在你已经成功编译了程序, 我们就来运行它. 在我的WinXP工作站上, 输出结果是:
1. {4E273621-5161-46C8-895A-48D0E52A0B83} (Realtek RTL8029(AS) Ethernet Adapter)
2. {5D24AE04-C486-4A96-83FB-8B5EC6C7F430} (3Com EtherLink PCI)

就如你所看到的, 网络接口的名称(当打开这个接口时, 需要传递这个名称给libpcap库)在windows环境下几乎是没有办法读懂的(Y-严重同意), 所以输出一个描述对于你的用户来说是非常有帮助的.


附注: Microsoft Visual C++ 工程的设置
1. 下载并安装 WinPcap, 推荐的版本是3.0
2. 从 http://winpcap.polito.it 下载 WinPcap Developer's Pack 并解压缩
3. 用 Microsoft Visual C++ 建立一个空工程 (empty project)
4. 复制源代码
5. 把 Winpcap Developer's Pack 中的 Includes 目录添加为新的包含文件目录
6. 添加库 wpcap.lib 和 wsock32.lib

WinPcap编程渐进教程

原文出处:http://winpcap.polito.it/docs/man/html/index.html 作者: Loris Degioanni (degioanni@polito.it), Ne...
  • yaneng
  • yaneng
  • 2009年06月19日 10:40
  • 605

Winpcap网络编程七之Winpcap学习教程,抓包,抓包!

获取完适配器信息之后,我们就需要利用适配器来
  • u010467643
  • u010467643
  • 2014年10月09日 09:41
  • 3584

WinPcap编程渐进教程(e文)

This section shows how to exploit the different features of the WinPcap API. It is organized as a tu...
  • xfreeboy
  • xfreeboy
  • 2004年10月27日 23:45
  • 2235

WinPcap编程【1】--编程环境的设置

vs2008.1、安装winpcap官网下载地址http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe 安装so easy,不多说了。2、下载WinP...
  • wu_huiwen
  • wu_huiwen
  • 2010年04月10日 15:06
  • 7125

Winpcap网络编程八之Winpcap学习教程,发包,发包!

时间问题,  使用 pcap_sendpacket() 发送单个数据包 下面的代码展示了发送一个数据包的最简单的方式。打开适配器以后,调用 pcap_sendpacket() 来发送手工制...
  • u010467643
  • u010467643
  • 2014年10月18日 19:00
  • 4159

winpcap的一个小的抓包测试程序

#include "pcap.h" #include #pragma comment(lib,"Ws2_32.lib") #pragma comment(lib,"wpcap.lib") v...
  • fengzhishang2019
  • fengzhishang2019
  • 2011年12月09日 18:34
  • 3819

winpcap安装使用教程

1、安装winpcap 地址:http://www.winpcap.org/install/default.htm =》安装软件 地址:http://www.winpcap.org/archive =...
  • qq_29350467
  • qq_29350467
  • 2015年06月27日 20:52
  • 6126

Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信

利用Winpcap 完成两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完成两台主机的通信(Hello! I’m …)...
  • u010467643
  • u010467643
  • 2014年10月18日 20:45
  • 6138

计算机网络课程设计--基于winpcap实现简单的抓包

山东大学计算机网络课程设计 基于winpcap实现网络编程 实现网络抓包
  • u012866869
  • u012866869
  • 2014年10月22日 00:54
  • 1523

CodeBlocks中使用winpcap

一、安装winpcap 1、登陆winpcap官网http://www.winpcap.org/install/default.htm下载最新版winpcap的安装包,然后到http://www...
  • baikaishui525
  • baikaishui525
  • 2012年04月02日 09:31
  • 3484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinPcap编程渐进教程(中文)
举报原因:
原因补充:

(最多只允许输入30个字)