失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > WinPcap获取网卡的更多信息

WinPcap获取网卡的更多信息

时间:2020-08-10 22:01:42

相关推荐

WinPcap获取网卡的更多信息

获取网卡的更多信息, IP地址, 子网掩码等等.

// pcap_findalldevs_ex2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#define WINVER 0x0501#define HAVE_REMOTE#include <pcap.h>#include <ws2tcpip.h>#pragma comment(lib,"wpcap.lib")#pragma comment(lib,"ws2_32.lib")// 函数原型void ifprint(pcap_if_t *d);char *iptos(u_long in);char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);int _tmain(int argc, _TCHAR* argv[]){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);getchar();return 1;}/* 打印所有可用信息 */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");}/* 将数字类型的IP地址转换成字符串类型的 */#define IPTOSBUFFERS 12char *iptos(u_long in){static char output[IPTOSBUFFERS][3*4+3+1];static short which;u_char *p;p = (u_char *)∈which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);sprintf(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;}

如果觉得《WinPcap获取网卡的更多信息》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。