@@ -18,6 +18,8 @@ const (
18
18
var (
19
19
cidrFilePtr = flag .String ("f" , "" ,
20
20
"[Optional] Name of file with CIDR blocks" )
21
+ printRangesPtrPtr = flag .Bool ("r" , false ,
22
+ "[Optional] Print IP ranges instead of all IPs" )
21
23
)
22
24
23
25
func main () {
@@ -50,8 +52,15 @@ func main() {
50
52
displayIPs (scanner .Text ())
51
53
}
52
54
} else if len (args ) > 0 { // look for CIDRs on cmd line
53
- for _ , ip := range args {
54
- displayIPs (ip )
55
+ var cidrs []string
56
+ if * printRangesPtrPtr == true {
57
+ cidrs = args [1 :]
58
+ } else {
59
+ cidrs = args
60
+ }
61
+
62
+ for _ , cidr := range cidrs {
63
+ displayIPs (cidr )
55
64
}
56
65
} else { // no piped input, no file provide and no args, display usage
57
66
flag .Usage ()
@@ -87,8 +96,12 @@ func displayIPs(cidr string) {
87
96
return
88
97
}
89
98
90
- for _ , ip := range ips [1 : len (ips )- 1 ] {
91
- fmt .Println (ip )
99
+ if * printRangesPtrPtr == true {
100
+ fmt .Printf ("%s-%s\n " , ips [1 ], ips [len (ips )- 2 ])
101
+ } else {
102
+ for _ , ip := range ips [1 : len (ips )- 1 ] {
103
+ fmt .Println (ip )
104
+ }
92
105
}
93
106
}
94
107
@@ -105,9 +118,11 @@ func increment(ip net.IP) {
105
118
106
119
func usage () {
107
120
fmt .Fprintf (os .Stderr , "CIDR to IPs version %s\n " , Version )
108
- fmt .Fprintf (os .Stderr , "Usage: $ cidr2ip [-f <filename>] <list of cidrs> \n " )
121
+ fmt .Fprintf (os .Stderr , "Usage: $ cidr2ip [-r] [- f <filename>] <list of cidrs> \n " )
109
122
fmt .Fprintf (os .Stderr , "Example: $ cidr2ip -f cidrs.txt\n " )
110
123
fmt .Fprintf (os .Stderr , " $ cidr2ip 10.0.0.0/24\n " )
124
+ fmt .Fprintf (os .Stderr , " $ cidr2ip -r 10.0.0.0/24\n " )
125
+ fmt .Fprintf (os .Stderr , " $ cidr2ip -r -f cidrs.txt\n " )
111
126
fmt .Fprintf (os .Stderr , " $ cat cidrs.txt | cidr2ip \n " )
112
127
fmt .Fprintf (os .Stderr , "--------------------------\n Flags:\n " )
113
128
flag .PrintDefaults ()
0 commit comments