WinPcap编程(一)

0.

按着文档顺序写的。

开发环境:win10+VS2013。

配置WinPcap环境就不多说。直接给网址:http://blog.sina.com.cn/s/blog_57432f380101qh3n.html

内容大多是函数解释+碰到的问题的解决方案。学习&&警示。

1.获取适配器列表

  获取适配器的目的是:获取本机有哪些适配器,便于之后选择用哪个适配器抓包。

  首先,先了解一个数据类型pcap_if/pcap_if_t,这是一个链表结构,用来存储本机的所有适配器。

struct pcap_if {
 struct pcap_if  *next;
 char  *name;  
 char  *description; 
 struct pcap_addr  *addresses;
 bpf_u_int32  flags; 
};

typedef struct pcap_if pcap_if_t; 

备注:

  第一是一个pcap_if的链表指向下一个设备接口;

  第二个是设备的实际的名字,这个名字是机器能识别的名字,供pcap_open_live()调用;

  第三个是设备的文本描述符,这个描述符就是人们能够识别的文本符号;有可能为null。

  第四个是一个地址指针,指向的是一系列接口(pcap_addr)的第一个指针;

  第五个是一个标志位,目前这个标志位主要是不是loopback设备。

  

  然后,获取适配器列表的函数是:

int pcap_findalldevs_ex ( char * source ;

 struct pcap_rmauth * auth;

 pcap_if_t ** alldevs;

 char * errbuf;

)

备注:

  1.source可以使用上面设置好的source,也可以使用:PCAP_SRC_FILE_STRING 或者 PCAP_SRC_IF_STRING,分别是文件和接口的字符串。"file://", "rpcap://"。

2.auth是远程登录信息(pcap_rmauth),有用户名、密码、类型。用户名和密码都是字符指针,类型有:RPCAP_RMTAUTH_NULL 和 RPCAP_RMTAUTH_PWD。多为BULL。

3.alldevs用于存储返回的接口信息。我们要事先定义pcap_if_t *alldevs,这是一个链表,存储接口信息。

4.errbuf出错信息。

  5.返回值为0则顺利;-1代表出现错误。

  最后,释放设备函数:

void pcap_freealldevs (pcap_if_t *alldevsp)

  释放内存。

  原装代码:

#define WIN32
#include "pcap.h" 

void main()
{
    pcap_if_t *alldevs, *d;
    int i = 0;
    char errbuf[PCAP_ERRBUF_SIZE];
    /* PCAP_ERRBUF_SIZE =256在pcap.h中定义*/

    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) /* 这个API用来获得网卡的列表 */
    {
        fprintf(stderr, "Error in pcap_findalldevs: %s\n", errbuf);
        //errbuf参数 当有异常情况发生时,这个参数会被PCAP填充为某3个特定的错误字串
        return;
    }

    /* 显示列表的响应字段的内容*/
    for (d = alldevs; d; d = d->next)
    {
        printf("%d. %s,%s\n", ++i, d->name,d->addresses);
        if (d->description)  {
            printf(" (%s)\n", d->description);
            //system("pause");
        }
        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);
    system("pause");
}

时间: 2024-10-08 03:02:00

WinPcap编程(一)的相关文章

WinPcap编程(二)

0. 这一次具体讲抓包的两种方法. 不过说明之前得知道几点: 第一,无线网卡的包需要特定网卡驱动才能抓到. 第二,抓以太网上的包的时候,需要禁用无线网卡.(这一点没搞清楚原因,有了解的希望能给个答案,解个惑.感谢.回学校了问问老师.) 第三,(建议)清除ARP表,最好自己写个批处理命令.快一点. 1.0 抓包步骤 步骤很简单:先打开适配器列表 --> 选择适配器 --> 通过遍历链表的方式到达你选择的适配器位置 --> 打开设备 --> 开始抓包. 每一个步骤都是一个函数.了解步骤

winpcap编程抓包实例和windump使用

http://www.winpcap.org/archive/ 官方文档 http://www.ferrisxu.com/WinPcap/html/index.html http://www.winpcap.org/ http://www.winpcap.org/windump/install/default.htm http://www.360doc.com/content/11/0319/10/54470_102500630.shtml WinDump的使用: WinDump.exe ver

winPcap编程之获取适配器信息

首先要读一下这一页的东西:http://www.winpcap.org/docs/docs_412/html/group__wpcapsamps.html 可以结合中文版本看http://www.ferrisxu.com/WinPcap/html/group__wpcapsamps.html 创建一个使用 wpcap.dll 的应用程序 用 Microsoft Visual C++ 创建一个使用 wpcap.dll 的应用程序,需要按一下步骤: 在每一个使用了库的源程序中,将 pcap.h 头文

c语言Winpcap编程构造并接收解析arp包

/* 程序功能: 1.构造arp包,并发送.程序参数顺序:源IP.目的IP.mac地址.flag 2.获取网络中的ARP数据包,解析数据包的内容.程序参数:日志文件名 winpacp中文技术文档(基本是英文的):http://www.ferrisxu.com/WinPcap/html/index.html */ 一.构造arp包 在构造之前先了解一下arp包的结构,先从网上找了张图 从图中可以看出以太网首部占14字节,以太网ARP字段占28字节.其中op字段为操作类型,1表示ARP请求.2表示A

WinPcap编程(前言&&学习)

计算机网络课设要求用WinPcap写对ARP包的接收与发送. 所以学了一下WinPcap的内容. 参考的博客: http://blog.csdn.net/htttw/article/details/7521053 http://www.cnblogs.com/yingfang18/archive/2010/11/27/1889596.html http://www.cnblogs.com/wangshuo/archive/2011/07/23/2114680.html [表示感谢] 参考文档地址

WinPcap编程(三)

1.过滤器设置 设置过滤器,得到你想要的哪种类型的包.Like WireShark. 过程:编译过滤器,然后设置过滤器.直接上参考文档的代码: if (d->addresses != NULL) /* 获取接口第一个地址的掩码 */ netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr; else /* 如果这个接口没有地址,那么我们假设这个接口在C类网络中 */ netmask=

基于WinPcap的简单网络编程配置

一.实验目的 1.学习和掌握基于WinPcap编程的基本方法. 2.通过监控IP包流量,了解IP协议的工作原理和IP数据包的基本结构. 二.实验内容  使用WinPcap编写一个控制台程序监控IP数据包流量,要求: ①以命令行形式运行:MonitorTraffic time 其中MonitorTraffic为程序名 三.实验步骤及实验结果 1)利用参考代码在VS2010开发工具编中写一个控制台程序 2)添加...\WpdPack\Include 项目-->**属性(alt+F7) 配置属性-->

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

大家好,本次我们需要完成的任务是: 完成两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完成两台主机的通信(Hello! I'm -) 声明:本博客不针对伸手党,求代码?求源码?求完整程序?得了,既然你对自己的学习这么不负责,那我也没必要写出来了,本文章的目的是为大家的Winpcap编程带来一定的借鉴,希望对大家的课程设计有一定的帮助.总之,我相信,大家看了前几篇 Winpcap 编程基础知识,再加上这篇文章的讲解,一步一步做下来,相信你能成功的. P.S.

WinPcap的开发与应用:获取设备列表

获取设备列表 1.通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表.libpcap和WinPcap都提供了 pcap_findalldevs_ex() 函数来实现这个功能: 这个函数返回一个 pcap_if 结构的链表, 每个这样的结构都包含了一个适配器的详细信息.值得注意的是,数据域 name 和 description 表示一个适配器名称和一个可以让人们理解的描述. 下列代码能获取适配器列表,并在屏幕上显示出来,如果没有找到适配器,将打印错误信息. 有关这段代