1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <stdio.h> #include <string.h> #include <stdlib.h>
#ifndef __linux__ #include <winsock2.h> #else #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #endif #include "pcap.h"
int printInterfaceDeviceInfoByArg(char *arg) { pcap_if_t *alldevs, *alldevs_device; int i = 0; char errbuf[PCAP_ERRBUF_SIZE]; struct pcap_addr *if_addr;
if(pcap_findalldevs(&alldevs, errbuf) < 0) { printf("pcap_findalldevs error\n"); return 1; }
if(!alldevs) { printf("%s\n", errbuf); }
if(arg == NULL) { for(alldevs_device=alldevs; alldevs_device; alldevs_device=alldevs_device->next) { printf("%d. interface name : %s", ++i, alldevs_device->name);
if(alldevs_device->description) printf(" (%s)", alldevs_device->description); if(alldevs_device->addresses) { for(if_addr=alldevs_device->addresses; if_addr; if_addr=if_addr->next) { struct sockaddr_in *in_addr = (struct sockaddr_in *)if_addr->addr; struct sockaddr_in *in_addr_netmask = (struct sockaddr_in*)if_addr->netmask; struct sockaddr_in *in_addr_broadaddr = (struct sockaddr_in*)if_addr->broadaddr;
switch(if_addr->addr->sa_family) { case AF_INET: printf("\nIP : %s", inet_ntoa(in_addr->sin_addr)); printf("\nnetmask : %s", inet_ntoa(in_addr_netmask->sin_addr)); if(alldevs_device->flags != 55) printf("\nbroadcast address : %s", inet_ntoa(in_addr_broadaddr->sin_addr)); break; } } } printf("\n\n"); } } else if(arg) { for(alldevs_device=alldevs; alldevs_device; alldevs_device=alldevs_device->next) { if(!strncmp(alldevs_device->name, arg, strlen(arg))) break; } printf("interface name : %s\n", alldevs_device->name); if(alldevs_device->description) printf(" (%s)", alldevs_device->description); if(alldevs_device->addresses) { for(if_addr=alldevs_device->addresses; if_addr; if_addr=if_addr->next) { struct sockaddr_in *in_addr = (struct sockaddr_in *)if_addr->addr; struct sockaddr_in *in_addr_netmask = (struct sockaddr_in*)if_addr->netmask; struct sockaddr_in *in_addr_broadaddr = (struct sockaddr_in*)if_addr->broadaddr; switch(if_addr->addr->sa_family) { case AF_INET: printf("\nIP : %s", inet_ntoa(in_addr->sin_addr)); printf("\nnetmask : %s", inet_ntoa(in_addr_netmask->sin_addr)); if(alldevs_device->flags != 55) printf("\nbroadcast address : %s", inet_ntoa(in_addr_broadaddr->sin_addr)); break; } } } } pcap_freealldevs(alldevs); return 0; }
|