通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。WinPcap提供了pcap_findalldevs_ex()函数来实现这个功能:返回一个pcap_if结构的链表,这样的结构都包含了一个适配器的详细信息。pcap_findalldevs_ex()函数的具体格式如下:

pcap_findalldevs_ex(char * source,struct pcap_rmthauth* auth,pcap_if_t** alldevs,char* errbuf);

函数创建一个可以被函数pcap_open()打开的网络设备链表。这个函数不但可以列出本地机器的所有设备,还可以列出远程机器的所有设备。

参数含义:

source:一个字符指针,保存来源的位置,会在查找适配器的时候检查,在这里设置成PCAP_SRC_IF_STRING;

auth:一个指向pcap_rmtauth结构体的指针。这个指针保存需要远程设备捕获协议认证的信息。由于我们捕本地设备,因此设置成NULL;

alldevs:一个pcap_if_t结构体指针,函数返回时用来保存找到的适配器的信息;

errbuf:用来保存错误信息;

返回值:

如果返回0,表示函数运行成功,此时alldevs不可能是NULL,说明找到合适的适配器,同过alldevs参数返回;如果返回-1,发生错误,或者没有在本地找到合适的适配器;

pcap_if_t结构体定义如下:

pcap_if* next;//指向链表的下一个节点,如果不为空指向一个pcap_if元素;

char* name;//字符串指针,存储传向pcap_open_live函数的设备名称;

char* description;//设备的描述;

pcap_addr* addresses;//这项这个设备接口地址链表的第一个元素;

u_int flags;//当前唯一的值是PCAP_IF_LOOPBACK,当当前接口是回路接口的时候设置;

当我们完成设备列表的使用后,应当调用pcap_freealldevs()函数释放内存资源。

下面是获取设备列表并打印具体信息的代码:

#include "pcap.h"int main()
{pcap_if_t *alldevs;pcap_if_t *d;int i = 0;char errbuf[PCAP_ERRBUF_SIZE];/*获取本地机器设备列表*/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);}/*打印列表*/for (d = alldevs;d != NULL;d=d->next){printf("%d. %s", i++, d->name);if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description available)\n");}if (i == 0){printf("\n No interfaces found!\n");exit(1);}//freepcap_freealldevs(alldevs);
 return 0;
}

结果如下:

WinPcap笔记(2):获取设备列表相关推荐

  1. WinPcap网络编程入门——1. 获取设备列表

    WinPcap网络编程入门--1. 获取设备列表 系列教程章节直达: Winpcap网络编程入门--1. 获取设备列表: 上节中我们简单介绍了 WinPcap 的相关资料,配置好了开发环境,现在就让我 ...

  2. 打印机无法从服务器获取信息,win10系统安装打印机提示无法从Windows Update获取设备列表怎么办...

    最近有win10系统用户到本站咨询这样一个情况,就是要安装打印机的时候,突然提示无法从Windows Update获取设备列表怎,遇到这样的问题该怎么办呢,本文就给大家讲解一下win10系统安装打印机 ...

  3. WinPcap获取设备列表

    最近在自学基于winpcap编程,多多少少中间会遇到一些问题,这里记录也分享一下中间的一些问题. 声明:实验基于WinPcap中文技术文档 再开始之前,我们需要在本机安装winpcap驱动程序和下载所 ...

  4. WinPcap编程3——获取网络适配器列表

    WinPcap应用程序的第一件事情就是获得已连接的网络适配器列表. WinPcap提供了pcap_findalldevs_ex() 函数来实现该功能: 它返回一个pcap_if结构的链表,每个这样的结 ...

  5. WinPcap笔记(9):保存数据包到堆文件

    这里我们将捕获到的数据包保存到堆文件里.堆文件的格式是libpcap的一种.这种格式中,包含了被捕捉到的包的二进制数据,并且,这种格式是许多网络工具所使用的一种标准,这些工具包括WinDump,Eth ...

  6. WinPcap笔记(4):打开适配器并捕获数据包

    前面已经能够得到是设备的信息了,现在开始做真正有意义的事情:打开适配器并捕获数据包.这里将用到函数pcap_open(),下面是函数的具体格式: pcap_t* pcap_open ( const c ...

  7. vc6可编译的 linux 源码,winpcap+vc6编译环境配置,以及获取网络设备列表的源代码...

    winpcap学习手记 (By 风色鸟) winpcap要使用VC6 第一次使用VC6,真的觉得配置很烦,而且觉得不可见.不可控.相比,还是喜欢linux下面的makefile. 尽管如此,还是需要把 ...

  8. android 高版本(设备11的)wifi扫描,获取wifi列表

    需求场景:智能设备有wifi模块,整套wifi功能,包括:搜索wifi列表,wifi连接,wifi切换,wifi忘记密码等. 高版本(安卓8以上)为了省电,节流,谷歌对wifi限制越来越多,安卓9以上 ...

  9. dotnet 读 WPF 源代码笔记 插入触摸设备的初始化获取设备信息

    在 WPF 触摸应用中,插入触摸设备,即可在应用里面使用上插入的触摸设备.在 WPF 使用触摸设备的触摸时,需要获取到触摸设备的信息,才能实现触摸 获取触摸设备插入 在 WPF 中,通过 Window ...

最新文章

  1. 使用级联样式表的好处在于_现在都在使用益阳云终端解决方案了,原因就在于这些好处...
  2. 贵州大学开题报告计算机,贵州大学毕业论文开题报告.docx
  3. svn 提交到远程仓库_聊聊如何从SVN迁移源码到Git仓库
  4. 通过反射写一个通用的设置某个对象的某个属性为指定的值
  5. 【转】Ubuntu 16.04 远程桌面
  6. Webpack实战(七):简单搞懂PostCSS的用法及与一些插件的用法
  7. BG.Hive - part3
  8. 计算机主机与显示器的接口类型,电脑显示器接口类型哪个好?VGA、DVI、HDMI、DP接口区别对比科普...
  9. Excel的序列号转换的算法
  10. Python操作Redis之mset和mget
  11. 用C++实现小游戏之石头剪刀布
  12. 基于 Verilog 的经典数字电路设计(8)计数器
  13. 我来告诉你,草根程序员如何进入BAT
  14. 大型网站架构:Flickr网站体系结构分析(转)
  15. Cheat Engine 在mac最新系统无法安装的解决办法
  16. 输入一行字符,以回车符作为输入结束的标志。统计其中英文字母、数字字符和其他字符的个数。
  17. 安全专家郭盛华:黑客是如何入侵手机的?
  18. C++中的TEXT函数
  19. 安装苹果cms时提示不支持fileinfo解决方法
  20. PHP接入网易易盾验证码

热门文章

  1. C++ 字符串编程训练2
  2. POJ 3189 Steady Cow Assignment
  3. 浙大计算机专硕培养方案,浙江大学硕士研究生培养方案
  4. 大型计算机变形,计算机变形病毒的主要特征和发展趋势
  5. python超市售货统计程序_用Python实现简易超市售货系统
  6. python游戏循环设置_Pygame:游戏循环前的初始菜单
  7. 位置服务器管理器,查看 DIMM 位置
  8. ajax省市二级联动硬编码,AJAX请求接受硬编码的JSON,但不接受软编码
  9. jq查找字段忽略html标签,jQuery过滤HTML标签并高亮显示关键字的方法
  10. python调用c函数传字符串参数_Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数...