/* ... */ /* this file is part of netraf project */ /* Copyright (c) 2005 M.S. */ /* this little program finds all network devices installed on machine and prints theirs capabilities to stdout ...]$ gcc ./02devices.c -lpcap -o ./02devices */ #include #include #include #include #include int main(int argc, char *argv[]){ char errbuf[PCAP_ERRBUF_SIZE]; pcap_if_t *alldevsp, *if_i; pcap_addr_t *addr_i; /* IP proto addr structure */ struct sockaddr_in address; int findalldevs_result; /* fill alldevsp with list of machine interfaces */ findalldevs_result = pcap_findalldevs(&alldevsp, errbuf); if(findalldevs_result != -1){ /* let's go through the interface list */ if_i = alldevsp; while(if_i != NULL){ /* interface's system name */ printf("%-10s", if_i->name); /* interface's description */ printf("desc: "); (if_i->description == NULL) ? printf("Regular device\n") : printf("%s\n", if_i->description); /* is it loopback device? */ printf("%-10sloopback: ", " "); (if_i->flags & PCAP_IF_LOOPBACK > 0) ? printf("YES") : printf("NO"); printf("\n"); /* go through interface adresses list */ addr_i = if_i->addresses; while(addr_i != NULL){ address = *(struct sockaddr_in *)(addr_i->addr); /* IP layer informations */ if(address.sin_family == AF_INET){ printf("%-10sinet addr: %s\n", " ", inet_ntoa(address.sin_addr.s_addr)); if(addr_i->netmask != NULL){ address = *(struct sockaddr_in *)(addr_i->netmask); printf("%-10snetmask: %s\n", " ", inet_ntoa(address.sin_addr.s_addr)); } if(addr_i->broadaddr != NULL){ address = *(struct sockaddr_in *)(addr_i->broadaddr); printf("%-10sbroadcast: %s\n", " ", inet_ntoa(address.sin_addr.s_addr)); } if(addr_i->dstaddr != NULL){ address = *(struct sockaddr_in *)(addr_i->dstaddr); printf("%-10spointopoint: %s\n", " ", inet_ntoa(address.sin_addr.s_addr)); } } addr_i = addr_i->next; } /* end while(addr_i != NULL) */ if_i = if_i->next; printf("\n"); } /* end while(if_i != NULL) */ /* free alldevs list */ pcap_freealldevs(alldevsp); }else{ /* if something were wrong, here is error message */ printf("Error:%s\n", errbuf); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }