下载
1. 官网:https://www.winpcap.org 选择 WinPcap >> Development >> Developer's Pack 下载;
2. 解压放到任意目录(不含中文);
使用
1. VS创建一个控制台程序;
2. 配置:
配置属性 >> VC++目录 >> 包含目录 添加Include文件夹
配置属性 >> VC++目录 >> 库目录 添加Lib文件夹
配置属性 >> 链接器 >> 输入 >> 附加依赖项 添加wpcap.lib
3. 代码:
#include "stdafx.h" #include "pcap.h" #define IPTOSBUFFERS 12 void ifprint(pcap_if_t *d); char * iptos(u_long in); int i = 0; int _tmain(int argc, _TCHAR* argv[]) { pcap_if_t * alldevs; pcap_if_t * d; char errbuf[PCAP_ERRBUF_SIZE]; /*取得列表*/ if (pcap_findalldevs(&alldevs, errbuf) == -1) { exit(1); } /*输出列表*/ for (d = alldevs; d != NULL; d = d->next) { ifprint(d); } if (i == 0) { printf("\nNo interfaces found!Make sure WinPcap is installed.\n"); return 0; } pcap_freealldevs(alldevs); char g = getchar(); return 0; } void ifprint(pcap_if_t *d) { pcap_addr_t *a; printf("%d.%s\n", ++i, d->name); if (d->description) { printf("Description:(%s)\n", d->description); } else{ printf("(No description available)\n"); } printf("Loopback:%s\n", (d->flags & PCAP_IF_LOOPBACK) ? "yes" : "no"); for (a = d->addresses; a != NULL; a = a->next) { printf("Address Family:#%d\n", a->addr->sa_family); switch (a->addr->sa_family) { case AF_INET: printf("Address Family Name:AF_INET\n"); if (a->addr) { printf("Address:%s\n", iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); } if (a->netmask) { printf("Netmask:%s\n", iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); } if (a->broadaddr) { printf("Broadcast Address:%s\n", iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); } if (a->dstaddr) { printf("Destination Address:%s\n", iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); } break; default: printf("AddressFamilyName:Unknown\n"); break; } } } 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_s(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); return output[which]; }
4. 运行效果:
文章评论