Code

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));
//return in_addr->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;
}