WinPcap获取网卡的更多信息
生活随笔
收集整理的這篇文章主要介紹了
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 12 char *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获取网卡的更多信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinPcap 获取本地适配器信息
- 下一篇: WinPcap捕获数据包