-
Notifications
You must be signed in to change notification settings - Fork 0
/
opt.c
98 lines (70 loc) · 1.32 KB
/
opt.c
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 <getopt.h>
#include "common.h"
char *iface = NULL, *not = NULL,
*timeout = NULL, *count = NULL;
#define USAGE "Usage: %s [options] IP/CIDR\noptions:\n" \
"-i, --iface <iface> Change the iface whose the packets are sent and received\n" \
"-t, --timeout <time> Change the timeout of receiving packets, in miliseconds\n" \
"-c, --count <count> Scan <count> hosts\n" \
"-h, --help Show this help message and exit\n" \
"-V, --version Prints the version info\n"
void parse(int argc, char * const argv[]) {
int ch;
struct option opts[] = {
{
"iface",
required_argument,
NULL,
'i'
},
{
"help",
no_argument,
NULL,
'h'
},
{
"timeout",
required_argument,
NULL,
't'
},
{
"count",
required_argument,
NULL,
'c'
},
{
"version",
no_argument,
NULL,
'V'
},
{0, 0, 0, 0}
};
while ((ch = getopt_long(argc, argv, "-i:t:c:hV", opts, NULL)) != -1) {
switch (ch) {
case '?':
exit(1);
case 'i':
iface = optarg;
break;
case 't':
timeout = optarg;
break;
case 'h':
printf(USAGE, prog);
exit(0);
case 'V':
printf(VERSION"\n"AUTHOR"\n");
exit(0);
case 'c':
count = optarg;
break;
case 1:
if (not == NULL)
not = optarg;
}
}
}