zoukankan      html  css  js  c++  java
  • 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 头文件包含(include)进来。
    • 如果你在程序中使用了WinPcap中提供给Win32平台的特有的函数, 记得在预处理中加入WPCAP 的定义。
    • 如果你的程序使用了WinPcap的远程捕获功能,那么在预处理定义中加入HAVE_REMOTE不要直接把remote-ext.h直接加入到你的源文件中去。
    • 设置VC++的链接器(Linker),把wpcap.lib库文件包含进来。wpcap.lib可以在WinPcap中找到。
    • 设置VC++的链接器(Linker),把ws2_32.lib库文件包含进来。这个文件分布于C的编译器,并且包含了Windows的一些socket函数。本教程中的一些范例程序,会需要它。

    记住以下几点

    • 要添加一个预处理定义,你需要打开Project菜单,选择Settings,然后选择C/C++选项卡,在General类下,你必须在Preprocessor Definitions下的文本框中添加定义。
    • 要在一个VC++6.0工程中,添加一,个新的库,你必须打开Project菜单,选择Settings,然后选择Link选项卡,然后把新库的名字添加到Object/Library modules下的文本框中
    • 要向VC++6.0中添加一个新的库所在的路径,你必须打开Tool菜单,选择Options,然后选择Directories选项卡,在Show directories下拉框中选择Library files,并且将新的路径添加到Directories中去
    • 要向VC++6.0中添加一个新的包含文件所在的路径,你必须打开Tool菜单,选择Options,然后选择Directories选项卡,在Show directories下拉框中选择Include files,并且将新的路径添加到Directories中去
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include "pcap.h"
     4 
     5 int main()
     6 {
     7     pcap_if_t *alldevs;
     8     pcap_if_t *d;
     9     int i=0;
    10     char errbuf[PCAP_ERRBUF_SIZE];
    11 
    12     /* 获取设备列表 */
    13     if (pcap_findalldevs(&alldevs, errbuf) == -1)
    14     {
    15         fprintf(stderr,"Error in pcap_findalldevs: %s
    ", errbuf);
    16         exit(1);
    17     }
    18 
    19     /* 打印列表 */
    20     for(d=alldevs;d;d=d->next)
    21     {
    22         printf("%d. %s", ++i, d->name);
    23         if (d->description)
    24             printf(" (%s)
    ", d->description);
    25         else            printf(" (No description available)
    ");
    26     }
    27 
    28     if(i==0)
    29     {
    30         printf("
    没有发现接口!确保WinPcap安装.
    ");
    31         return 0;
    32     }
    33 
    34     /* 不再需要设备列表了,释放它 */
    35     pcap_freealldevs(alldevs);
    36     return 0;
    37 }

     输出结果:

    1、pcap_if_t 是什么呢?从pcap.h中看到

    typedef struct pcap_if pcap_if_t;

    而pcap_if 在文档中是这样介绍的:

    可以发现其实 pcap_if 是一个链表,而 pcap_if 有五个值,其中 next 是指向链表中下一个结构体的,name 是适配器的名字,description 是对适配器的描述,

    addresses 是适配器分配到的 ip地址信息,flags 是一个接口标志,目前仅有一个标志是 PCAP_IF_LOOPBACK,代表环回接口。

    再看下面这个重要的函数:

    pcap_findalldevs ( pcap_if_t ** alldevsp, char* errbuf )

      返回系统上可用的接口列表。

      pcap_findalldevs()构造一个网络设备列表,可以打开pcap_open_live()。(请注意,可能会有网络设备,不能打开pcap_open_live过程()的调用pcap_findalldevs(),因为,例如,这一过程可能没有足够的权限打开捕捉;;如果是这样,这些设备不会出现在列表中。) alldevsp设置为指向列表的第一个元素,每个元素的列表是pcap_if_t类型。

    简单的了解一下,pcap_open_live()是打开一个物理接口实时捕获,具体的可以去看一下文档。这个函数和以前版本是不同的。之前调用的是pcap_findalldevs_ex()函数,4.1.2版本的WinPcap换了函数。

    pcap_freealldevs()函数是清空一个接口的列表,这个就不解释了。
  • 相关阅读:
    APP性能测试中的几个重要概念
    linux初学体会
    Centos 关闭指定端口的进程
    【初学Python】01-第一个小说爬虫
    SQLsever存储过程分页查询
    记MVC学习过程中一次传参到View时遇到的错误
    未能加载文件或程序集“System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项
    Android Studio导包无效,全部报红
    记一次使用SimpleDateFormat 格式化时间时遇到的问题
    Spring-Boot中Tomcat端口修改
  • 原文地址:https://www.cnblogs.com/gdayq/p/5830764.html
Copyright © 2011-2022 走看看