获取有关可用适配器的基本信息(即设备名称和描述)。实际上WinPcap还提供其他高级信息。特别地,pcap_findalldevs_ex()返回的每个pcap_if结构还包含pcap_addr结构的列表,其中包含:

此外,pcap_findalldevs_ex()还可以返回远程适配器和位于给定本地文件夹中的pcap文件列表。

以下示例提供了一个打印pcap_if结构的完整内容的ifprint()函数。该程序由pcap_findalldevs_ex()返回的每个条目调用。

#include <stdio.h>#include "pcap.h"#ifndef WIN32#include <sys/socket.h>#include <netinet/in.h>
#else#include <winsock.h>
#endif// 函数原型
void ifprint(pcap_if_t *d);
char *iptos(u_long in);
char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);int main()
{pcap_if_t *alldevs;pcap_if_t *d;char errbuf[PCAP_ERRBUF_SIZE+1];char source[PCAP_ERRBUF_SIZE+1];printf("Enter the device you want to list:\n""rpcap://              ==> lists interfaces in the local machine\n""rpcap://hostname:port ==> lists interfaces in a remote machine\n""                          (rpcapd daemon must be up and running\n""                           and it must accept 'null' authentication)\n""file://foldername     ==> lists all pcap files in the give folder\n\n""Enter your choice: ");fgets(source, PCAP_ERRBUF_SIZE, stdin);source[PCAP_ERRBUF_SIZE] = '\0';/* 检索接口列表 */if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);exit(1);}/* 扫描列表打印每个条目 */for(d=alldevs;d;d=d->next){ifprint(d);}pcap_freealldevs(alldevs);return 1;
}/* Print all the available information on the given interface */
void ifprint(pcap_if_t *d)
{pcap_addr_t *a;char ip6str[128];/* Name */printf("%s\n",d->name);/* Description */if (d->description)printf("\tDescription: %s\n",d->description);/* Loopback Address*/printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");/* IP addresses */for(a=d->addresses;a;a=a->next) {printf("\tAddress Family: #%d\n",a->addr->sa_family);switch(a->addr->sa_family){case AF_INET:printf("\tAddress Family Name: AF_INET\n");if (a->addr)printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));if (a->netmask)printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));if (a->broadaddr)printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));if (a->dstaddr)printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));break;case AF_INET6:printf("\tAddress Family Name: AF_INET6\n");if (a->addr)printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str)));break;default:printf("\tAddress Family Name: Unknown\n");break;}}printf("\n");
}/* 从tcptraceroute中,将数字IP地址转换为字符串 */
#define IPTOSBUFFERS    12
char *iptos(u_long in)
{static char output[IPTOSBUFFERS][3*4+3+1];static short which;u_char *p;p = (u_char *)&in;which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);_snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);return output[which];
}char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)
{socklen_t sockaddrlen;#ifdef WIN32sockaddrlen = sizeof(struct sockaddr_in6);#elsesockaddrlen = sizeof(struct sockaddr_storage);#endifif(getnameinfo(sockaddr, sockaddrlen, address, addrlen, NULL, 0, NI_NUMERICHOST) != 0) address = NULL;return address;
}

c++ winpcap开发(2)相关推荐

  1. 在Visual Studio 2005下配置WinPcap开发环境

    在Visual Studio 2005下配置WinPcap开发环境 http://www.winpcap.org/archive/ 4.1beta5_WpdPack.zip http://www.wi ...

  2. winpcap 开发

    Winpcap是一个强大的网络开发库,可以实现许多功能:获取可用的网络适配器:获取指定适配器信息(比如名称和描述信息):捕获指定网卡的数据封包:发送数据封包:过滤捕获的包以获取特定包等. 首先到htt ...

  3. socket编程之DEV C++配置winpcap开发环境并编写网络嗅探器sniffer

    欢迎关注我的个人博客:www.zuzhiang.cn 期末计算机网络课程设计让做一个网络嗅探器,要求可以检测和选择网卡,并打开到混杂模式,监听局域网中的所有数据包并解析出所用网络协议以及首部各个字段的 ...

  4. codeblocks配置winpcap开发环境

    转载请注明出处,谢谢_ (:з」∠)_ 起因 最近作业要用Winpcap开发包分析.pcap文件实现报文字段的识别-本来打算用Visual Studio写,不过想起以前打OJ的时候都用Code::Bl ...

  5. Dev-C++ 配置 WinPcap 开发环境

    VC++ 6.0实在是太老了,自己并不愿意在这个平台上开发,所以转而使用Dev-C++,以下是综合网上的教程和自己的试验总结出的用Dev-C++进行WinPcap网络开发的所需的环境配置工作: 首先是 ...

  6. 一步一步开发sniffer(Winpcap+MFC)(一)工欲善其事,必先配环境——配置winpcap开发环境

    0.说在前面的话 1) 本文将以一个初学者的角度,一步一步几乎是从0开始讲述如何完成一个基于winpcap+MFC的sniffer(嗅探器)当然我指的"0"并不是指连编程都不会,如 ...

  7. 基于winpcap开发的相关资料

    2019独角兽企业重金招聘Python工程师标准>>> http://www.oschina.net/code/snippet_196111_7100 http://wenku.ba ...

  8. c++ winpcap开发(9)

    收集网络流量统计 本课程展示了WinPcap的另一个高级功能:收集网络流量统计信息的能力.统计引擎利用内核级包过滤器对传入的数据包进行有效的分类.如果您想了解更多详细信息,可以参考NPF驱动程序内部手 ...

  9. c++ winpcap开发(8)

    发送数据包 虽然名称WinPcap清楚地表明图书馆的目的是分组捕获,但还提供了其他有用的原始网络功能.其中,用户可以找到一组完整的功能来发送数据包. 请注意,原来的libpcap库目前没有提供任何方式 ...

  10. c++ winpcap开发(7)

    处理离线转储文件 在这个课程中,我们将学习如何处理数据包捕获到一个文件(转储到文件).WinPcap提供广泛的功能来将文件的网络流量保存到文件并读取转储的内容 - 本课将介绍如何使用所有这些功能.我们 ...

最新文章

  1. hdu5247找连续数(打表)
  2. FatFs文件系统的移植
  3. uGUI知识点剖析之RectTransform
  4. js操作元素节点对象value
  5. leetcode990. 等式方程的可满足性
  6. 解决windows安装mongodb出现dbexit: rc:100错误
  7. 当程序员说“这代码写的可真烂”,他们的意思是“这烂代码不是我写的”。而当他们说这段代码有些“小问题”时,很可能这代码是他们自己写的...
  8. c语言2的1000次方,在网上看到一个求2的10000次方的方法,有个地方看不懂,求大佬...
  9. 代码调试技巧【OI缩水版】
  10. 编译Caffe错误:libpython3.5m.a(abstract.o): relocation R_X86_64_32S against
  11. 电脑拖机,win10一台电脑两人用
  12. linux sz命令详解,Linux rz和sz命令详解
  13. addr2line排查地址
  14. linux marvell 网卡驱动,linux下安装Marvell Yukon网卡驱动
  15. c4d怎么导入fbx_c4d怎么导入模型?品索教你Maya模型文件如何导入到C4d
  16. 什么是云备份,如何在教育行业正确使用云备份?
  17. 计算机科学怎么撤稿,撤稿Nature后,这所大学在撤Science!
  18. 图像算法工程师三重境界
  19. 好用的工作邮箱有哪些?工作邮箱如何登录
  20. linux -unrar解压缩

热门文章

  1. leetcode:剑指offer----数组中重复的数字
  2. 统计测序数据reads数和碱基数的几种方法
  3. FCPX插件:Color Titles动画彩色文本标题
  4. RapidMiner Studio for Mac - 可视化综合数据平台
  5. 由于找不到appvisvsubsystems32.dll_找茬游戏大全:我找东西贼快!小清新找茬游戏小程序,点开既玩...
  6. 简单英文题 24 Divisor and Multiple(python)
  7. anjular.js读取数据库数据调用实例
  8. python字符串_python字符串格式化
  9. installshield 脚本 在卸载过程执行_Linux下运行Jmeter脚本
  10. PHP笔记-平润年判断例子