使用pcap_findalldevs_ex获取设备列表遇到的问题

原创 2006年08月07日 22:52:00

在winpcap3.1beta4的文档中

有个获取设备列表的例子程序

其中使用到了pcap_findalldevs_ex()函数,在文档中是这样介绍这个函数的:

This function is a superset of the old 'pcap_findalldevs()', which is obsolete, and which allows listing only the devices present on the local machine.  Vice versa, pcap_findalldevs_ex() allows listing the devices present on a remote machine as well.

简单说pcap_findalldevs_ex()是pcap_findalldevs()的一个超集, 他不仅可以获取本地的设备列表,还可以获取远程计算机的社别列表,但是在将pcap_findalldevs()换成pcap_findalldevs_ex()的过程中却出现了意想不到的错误

 

 

 

#include <cstdlib>
#include 
<iostream>
#include 
<pcap.h>
using namespace std;

int main(int argc, char *argv[])
{
    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,&alldevs,errbuf)==0){
         
while(!(alldevs==NULL)){
               cout
<<"设备"<<i<<"的名称"<<(alldevs->name)<<endl;
               cout
<<"设备"<<i<<"的描述"<<(alldevs->description)<<endl;
               alldevs
=alldevs->next;
               i
++;                                                              
          }
    }    
    system(
"PAUSE");
    
return EXIT_SUCCESS;
}

 使用dev c++编译,出现以下错误

      F:/IT学习/c++/301/main.cpp In function `int main(int, char**)':
14 F:/IT学习/c++/301/main.cpp `PCAP_SRC_IF_STRING' undeclared (first use this function)
      (Each undeclared identifier is reported only once for each function it appears in.)
14 F:/IT学习/c++/301/main.cpp `pcap_findalldevs_ex' undeclared (first use this function)
       F:/IT学习/c++/301/Makefile.win [Build Error]  [main.o] Error 1

在网上查了一下,有人说这是wincap的一个失误,忘记把该函数的声明文件包含进去了

我打开pcap.h看了一下,确实没有pcap_findalldevs_ex函数的声明

不死心

找个文本搜索工具,在dev c++的include文件夹中搜索pcap_findalldevs_ex,[在此之前我已经把wincap的头文件全部拷入了该目录,呵呵,有些.....]

结果真让我查到了,该函数的名称在remote-ext.h找到了

我看了一下,嘿嘿,就是他了

该代码,包含该文件

 

#include <cstdlib>
#include 
<iostream>
#include 
<pcap.h>
#include 
<remote-ext.h>
using namespace std;

int main(int argc, char *argv[])
{
    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,&alldevs,errbuf)==0){
         
while(!(alldevs==NULL)){
               cout
<<"设备"<<i<<"的名称"<<(alldevs->name)<<endl;
               cout
<<"设备"<<i<<"的描述"<<(alldevs->description)<<endl;
               alldevs
=alldevs->next;
               i
++;                                                              
          }
    }    
    system(
"PAUSE");
    
return EXIT_SUCCESS;
}

再次编译,竟然还有错误

 F:/IT学习/c++/301/main.o(.text+0x15b) In function `main':
      [Linker error] undefined reference to `pcap_findalldevs_ex'
 F:/IT学习/c++/301/main.o(.text+0x15b) ld returned 1 exit status
 F:/IT学习/c++/301/Makefile.win [Build Error]  [工程1.exe] Error 1

想起来了,使用dev c++的时候常遇到的问题

加载dll

打开工程选项->参数->连接器->加入库或者对象

找到wpcap.lib,确定

然后再编译,通过

这是我机器上的运行结果

设备0的名称rpcap:///Device/NPF_GenericNdisWanAdapter
设备0的描述Network adapter 'Generic NdisWan adapter' on local host
设备1的名称rpcap:///Device/NPF_{FE74219E-5D08-45CA-8EFF-19CEA31C26AA}
设备1的描述Network adapter 'Broadcom NetXtreme Gigabit Ethernet Driver' on local
 host
请按任意键继续. . .

呵呵,有些乱啊

好在通过了

现在看来,如果使用不到pcap_findalldevs_ex的高级特性的化

仅仅是想获取一下设备列表的话

还是使用原先的pcap_findalldevs()函数吧

简单易用,相信也不会发生这样的错误

呵呵

 当然,这只是测试代码

WinPcap Pcap_findalldevs_ex() pcap_if

本课用到的数据结构简介: ①pcap_if 结构: ⑴typedef struct pcap_if pcap_if_t cap_if在incs/pcap.h文件的72行有定义 ⑵pcap_...
  • m_bkj
  • m_bkj
  • 2015年12月22日 12:46
  • 1758

使用pcap_findalldevs_ex 编程出现问题

使用pcap_findalldevs_ex()函数编程,在文档中是这样介绍这个函数的: This function is a superset of the old 'pcap_findalldev...
  • agoago_2009
  • agoago_2009
  • 2011年10月12日 14:42
  • 5850

pcap_findalldevs

序pcap_open_live要打开的网卡名称, 在linux中一般都选第一块网卡, e.g. eth0. 如果在用wincap, 服务控制端一般是不知道本地的网卡名称的,需要自己去找. winp...
  • LostSpeed
  • LostSpeed
  • 2017年08月08日 10:50
  • 374

"undefined reference to" 问题解决方法

最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func'     ...
  • aiwoziji13
  • aiwoziji13
  • 2012年03月07日 20:13
  • 411239

Linux系统Eclipse CDT引用动态库(第三方库)的解决方案及问题

1、PFring第三方库的编译和demo运行 PFring为第三方快速抓包库,具体的安装和例子使用方法见:http://blog.csdn.net/xuejiren/article/details/2...
  • xuejiren
  • xuejiren
  • 2014年04月01日 00:37
  • 6314

调用pcap_findalldevs返回列表为空的解决办法

如何解决winpcap中pcap_findalldevs返回的网卡列表为空的BUG。
  • namelcx
  • namelcx
  • 2011年03月24日 13:31
  • 4708

使用pcap_findalldevs_ex获取设备列表遇到的问题

在winpcap3.1beta4的文档中有个获取设备列表的例子程序其中使用到了pcap_findalldevs_ex()函数,在文档中是这样介绍这个函数的:This function is a sup...
  • bingdian37
  • bingdian37
  • 2006年08月07日 22:52
  • 7832

WinPcap的小失误,pcap_findalldevs_ex函数。

 在使用pcap_findalldevs_ex函数时,发现引用了 pcap.h后 报错提示未找到该函数。打开pcap.h后发现,确实没有该函数的定义。只有一个pcap_findalldevs。后查询发...
  • xiciliu
  • xiciliu
  • 2008年12月01日 13:01
  • 379

WinPcap教程:(1)获取设备列表

通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。 libpcap和WinPcap都提供了pcap_findalldevs_ex()函数来实现这个功能。这个函数返回一...
  • u013710265
  • u013710265
  • 2017年05月17日 15:27
  • 197

WinPcap笔记(2):获取设备列表

通常,编写基于WinPcap应用程序的第一件事情,就是获得已连接的网络适配器列表。WinPcap提供了pcap_findalldevs_ex()函数来实现这个功能:返回一个pcap_if结构的链表,这...
  • u012877472
  • u012877472
  • 2015年11月13日 15:11
  • 1082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用pcap_findalldevs_ex获取设备列表遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)