用Winpcap怎么获取网卡的MAC和IP

用Winpcap如何获取网卡的MAC和IP?
用Winpcap如何获取网卡的MAC和IP?

------解决方案--------------------
//获取网卡参数程序,前提是要安装winpcap及将头文件与lib文件复制到相关文件夹下
#include "pcap.h" 
#pragma comment(lib, "wpcap.lib")

main() 

pcap_if_t *alldevs; 
pcap_if_t *d; 
int i=0; 
char errbuf[PCAP_ERRBUF_SIZE]; 
 
/* 这个API用来获得网卡 的列表 */ 
if (pcap_findalldevs(&alldevs, errbuf) == -1) 

fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); 
exit(1); 

 
/* 显示列表的响应字段的内容 */ 
for(d=alldevs;d;d=d->next) 

printf("%d. %s", ++i, d->name); 
if (d->description) 
printf(" (%s)\n", d->description); 
else printf(" (No description available)\n"); 

 
if(i==0) 

printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); 
return; 


/* We don’t need any more the device list. Free it */ 
pcap_freealldevs(alldevs); 



//获取IP参数程序
#include "pcap.h" 
#pragma comment(lib, "wpcap.lib")
void ifprint(pcap_if_t *d); 
char *iptos(u_long in); 

int main() 

pcap_if_t *alldevs; 
pcap_if_t *d; 
char errbuf[PCAP_ERRBUF_SIZE+1]; 

/* 获得设备列表 */ 
if (pcap_findalldevs(&alldevs, errbuf) == -1) 

fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf); 
exit(1); 


/* 遍历所有元素 */ 
for(d=alldevs;d;d=d->next) 

ifprint(d); 


return 1; 


/* Print all the available information on the given interface */ 
void ifprint(pcap_if_t *d) 

pcap_addr_t *a; 

/* 名称 */ 
printf("%s\n",d->name); 

/* 描述 */ 
if (d->description) 
printf("\tDescription: %s\n",d->description); 

/* 回环地址 */ 
printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no"); 

/* IP 地址 */ 
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) 
/* Y- IP 地址 */ 
printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr)); 
if (a->netmask) 
/* Y- 掩码 */ 
printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr)); 
if (a->broadaddr) 
/* Y- 广播地址 */ 
printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr)); 
if (a->dstaddr) 
/* Y - 目标地址 */ 
printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr)); 
break; 
default: 
/* 未知 */ 
printf("\tAddress Family Name: Unknown\n"); 
break; 


printf("\n"); 


/* 来自 tcptracert, 把数字IP地址转换为点格式 */ 
#define IPTOSBUFFERS 12 
char *iptos(u_long in) 

static char output[IPTOSBUFFERS][3*4+3+1]; 
static short which;