#include<pcap.h>
#ifndef WIN32
#include<sys/socket.h>
#include<netinet/in.h>
#else
#include<winsock.h>
#endif
void ifprint(pcap_if_t *d);
int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int i=0;
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",errbuf);
exit(1);
}
for(d=alldevs;d!=NULL;d=d->next){
ifprint(d);
printf("\n\n");
}
if(0!=i){
printf("no interface found!Make sure winpcap is installed.\n");
}
pcap_freealldevs(alldevs);
return 0;
}
void ifprint(pcap_if_t *d){
pcap_addr_t *a;
printf("name: %s\n",d->name);
if(d->description)
printf("description: %s\n",d->description);
printf("loopback interface: %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:
if(a->addr)
printf("address: %s\n",inet_ntoa(((struct sockaddr_in *)a->addr)->sin_addr));
if(a->netmask)
printf("netmask: %s\n",inet_ntoa(((struct sockaddr_in *)a->netmask)->sin_addr));
if(a->broadaddr)
printf("broadaddr: %s\n",inet_ntoa(((struct sockaddr_in *)a->broadaddr)->sin_addr));
if(a->dstaddr)
printf("dstaddr: %s\n",inet_ntoa(((struct sockaddr_in *)a->dstaddr)->sin_addr));
break;
case AF_INET6:
break;
default:
printf("address family: unknow\n");
break;
}
}
}
基于WINPCAP编写的第二程序
最新推荐文章于 2019-04-05 08:40:19 发布