ARP协议(3)ARP编程--winpcap&vs2012配置

好,之前说了那么多,终于到了,我们可以操刀的时候了。

在对ARP协议编程前,我们必须要能控制网络适配器(网卡),这个部分就是驱动!
“我们要编写网卡驱动?”,对,但是,至少我们现阶段不需要。网络上有写好的驱动和开发包,我们拿来就可以用。我这里使用的是winpcap的驱动以及开发包,因此我们首先要安装和搭建我们的编程环境:

1、下载winpcap驱动。
如果是安装了 wireshark的话,它就自动帮我们装了winpcap驱动。(wireshark是基于winpcap开发的)
http://www.winpcap.org/install/default.htm 这个是winpcap官网下载页面,我下载的是4.1.3版本的。
下载到本地后,直接双击安装就可以了。

2、下载winpcap开发包
http://www.winpcap.org/devel.htm 这个是winpcap官网的开发包下载,主要它的版本要和驱动版本一致。
下载到本地后,解压缩就可以了。里面有winpcap的库、头文件,以及例子和使用文档

http://www.ferrisxu.com/WinPcap/ 这个是winpcap相关函数的使用说明(中文)

3、环境配置。
vs环境设置
3.1  向vs2012导入头文件
     有两种方式,这两种方式都可以,但我更倾向于第2中,因为第1中存在污染源库的风险
     (1) 直接把 ...\WpdPack\Include\(这个目录是第2步中开发包解压后的目录) 下的所有文件都复制到 vs2012 的include 目录下
     (2) 在vs2012中配置:
     项目属性 -->配置属性 -->c/c++ --> 常规; 右侧【附加包含目录】 在这一选项中把路径加进去,如图:

  3.2 向vs中导入库
     有两种方式,这两种方式都可以,但我更倾向于第2中,因为第1中存在污染源库的风险
    (1) 直接把 ...\WpdPack\lib\(这个目录是第2步中开发包解压后的目录) 下的所有文件都复制到 vs2012 的lib 目录下
    (2)  在vs2012中配置:
      (i) 项目属性 -->配置属性 --> 链接器 --> 右侧的 附加库目录,在这一选项中把路径加进去,如图:
    (ii)  项目属性 -->配置属性 --> 链接器 --> 输入 右侧的 附加依赖项 把库加进去,如图 :

  3.3 增加编译选项WIN32
   如果按以上步骤操作后,编译的话,回报: pcap/pcap.h 找不到<system/time.h>
   我们打开pcap/pcap.h这个文件,可以看到:
应该是没有 WIN32 的定义,于是只要加一个这样的定义即可,如图:



4、测试:
我们的环境基本上已经配置好了,现在我们来测试下,是否可以正常运行。

以下这段代码来自: http://www.winpcap.org/docs/docs_412/html/group__wpcap__tut1.html,主要功能是获取机器上的所有网络适配器(网卡)。

在实现的时候,得加上 #define HAVE_REMOTE 这个宏,因为pcap_findalldevs_ex()这个函数是定义在remote-ext.h中,而要正确使用这个函数的话,需要有这个宏的定义。(读者可以进入pcap.h查找remote-ext.h这个文件的包含)
#define HAVE_REMOTE
#include "pcap.h"

void main()
{
    pcap_if_t *alldevs;// 适配器列表,它是一个链表的数据结构
    pcap_if_t *d; // 保存某个适配器
    int i=0;
    char errbuf[PCAP_ERRBUF_SIZE];
    
    //获取本地设备列表
    /* Retrieve the device list from the local machine */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
        exit(1);
    }
    
    /* Print the list */
    for(d= alldevs; d != NULL; 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);
}

这里对一些关键代码作下简单说明,关于其他的详细说明及使用, 大家可以参考winpcap的技术文档。
pcap_if_t *alldevs;// 适配器列表,它是一个链表的数据结构
//查找网络适配器,并把结果保存在 alldevs 里
pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf)
// 用完之后要释放
 pcap_freealldevs(alldevs);


 
 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiongxianhe

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值