zoukankan      html  css  js  c++  java
  • 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) 直接把 ...WpdPackInclude(这个文件夹是第2步中开发包解压后的文件夹) 下的全部文件都拷贝到 vs2012 的include 文件夹下
         (2) 在vs2012中配置:
         项目属性 -->配置属性 -->c/c++ --> 常规; 右側【附加包括文件夹】 在这一选项中把路径加进去,如图:

      3.2 向vs中导入库
         有两种方式,这两种方式都能够。但我更倾向于第2中,由于第1中存在污染源库的风险
        (1) 直接把 ...WpdPacklib(这个文件夹是第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
    ", 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)
    ", d->description);
            else
                printf(" (No description available)
    ");
        }
        
        if (i == 0)
        {
            printf("
    No interfaces found! Make sure WinPcap is installed.
    ");
            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);


    
    
  • 相关阅读:
    Spring Boot+Vue 项目前端_Vuejs环境搭建
    vue+element 数据表格分页
    vue+elementui 实现新增和修改共用一个弹框
    Vue删除数据成功后如何刷新表格数据
    vue中使用echart绑定点击事件进行路由切换
    Vue的生命周期
    添加访问量插件
    Docker部署的Gitlab平行迁移到另一台服务器上
    GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution【阅读笔记】
    Learning Continuous Image Representation with Local Implicit Image Function【阅读笔记】
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7082179.html
Copyright © 2011-2022 走看看