下载
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. 运行效果: