首先要读一下这一页的东西: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中去
 #include <stdio.h>
#include <stdlib.h>
#include "pcap.h" int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=;
char errbuf[PCAP_ERRBUF_SIZE]; /* 获取设备列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit();
} /* 打印列表 */
for(d=alldevs;d;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==)
{
printf("\n没有发现接口!确保WinPcap安装.\n");
return ;
} /* 不再需要设备列表了,释放它 */
pcap_freealldevs(alldevs);
return ;
}

输出结果:

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()函数是清空一个接口的列表,这个就不解释了。

winPcap编程之获取适配器信息(二)的更多相关文章

  1. winPcap编程之获取适配器详细信息(三)

    显示适配器详细信息 先贴上代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #includ ...

  2. C# 通过豆瓣网络编程API获取图书信息

    这篇文章主要是关于如何通过豆瓣API获取信息的书籍,起初,我看到了原来的想法的内容是"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源代码,再通过正則 ...

  3. winPcap编程之打开适配器并捕获数据包(四 转)

    在贴源码之前先介绍一个将要用到的很重要的函数--pcap_open(),下面是pcap_open()在remote-ex.h中的声明: pcap_t *pcap_open(const char *so ...

  4. java反射子之获取方法信息(二)

    一.获取方法 1.方法作用. 2. 二.获取方法信息.(修饰符,返回值,方法名称,参数列表,抛出的异常). ############################################## ...

  5. python 面向对象编程、获取对象信息

    面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...

  6. WinPcap编程(二)

    0. 这一次具体讲抓包的两种方法. (建议)清除ARP表,最好自己写个批处理命令.快一点. 1.0 抓包步骤 步骤很简单:先打开适配器列表 --> 选择适配器 --> 通过遍历链表的方式到 ...

  7. winpcap编程设置过滤器之指定获取某个网站的数据

    下面,我将以 乱世隋唐页游 为例,通过编码获取这里面的数据. 游戏图: 我是乱世隋唐的网址是:www.917st.com 这个是官网网址的服务器地址.  42.62.0.14 我玩的游戏服是84区.网 ...

  8. SharePoint 2013 APP 开发示例 (二)获取用户信息

    SharePoint 2013 APP 开发示例 (二)获取用户信息 这个示例里,我们将演示如何获取用户信息: 1. 打开 Visual Studio 2012. 2. 创建一个新的  SharePo ...

  9. PHP微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo(二)

    一.这个文件微信授权使用的是OAuth2.0授权的方式.主要有以下简略步骤: 第一步:判断有没有code,有code去第三步,没有code去第二步 第二步:用户同意授权,获取code 第三步:通过co ...

随机推荐

  1. Web应用程序的开发步骤

    Web应用程序的开发步骤 如今已进入了web2.0高速发展的互联网时代,各种互联网的Web应用程序如雨后春笋般出现.那么作为一名Web开发人员,怎样去开发一款优秀的Web应用程序呢?这个问题没有一个简 ...

  2. 【★】微信之于QQ的市场哲学

    2016年的移动app下载排行榜出炉后,我们惊奇发现,前十名中有6个应用软件来自腾讯公司.而前两名毋庸置疑是远远碾压第三名的微信与qq.这让我们看到社交app的重要性的同时也回到了那个原始的问题:腾讯 ...

  3. Beta阶段项目复审

    复审人:王李焕 六指神功:http://www.cnblogs.com/teamworkers/ wt.dll:http://www.cnblogs.com/TeamOf/ 六个核桃:http://w ...

  4. 201521123108《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  5. eclipse ide for java ee developers与eclipse ide for java developers有什么区别

    前者集成了WTP,可用于j2ee开发,功能更完善

  6. Java课程设计-计算器 丁树乐(201521123024)

    1.团队课程设计博客链接 http://www.cnblogs.com/br0823/p/7064407.html 2.个人负责模块或任务说明 界面优化 各类之间拼接 3.自己的代码提交记录截图 4. ...

  7. MinHook测试与分析(x86下 E8,E9,EB,CALL指令测试,且逆推测试微软热补丁)

    依稀记得第一次接触Hook的概念是在周伟民先生的书中-><<多任务下的数据结构与算法>>,当时觉得Hook的本质就是拦截,就算到现在也是如此认为. 本篇文章是在x86下测 ...

  8. 保存数据到sdcard中去

    这里只贴上核心的代码:其它自行脑补!

  9. ArrayList 和 LinkedList 的实现与区别

    (转载请标明出处) 1.ArrayLis t的实现 2.LinkedLis t的实现 3.ArrayList 和 LinkedList 的区别 ArrayList 的实现: 1.MyArrayList ...

  10. BZOJ1207_打鼹鼠_KEY

    [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MB Description 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地 ...