Skip to content

Commit fea0449

Browse files
committed
feat: ips from list
1 parent 1e6b674 commit fea0449

File tree

5 files changed

+98
-34
lines changed

5 files changed

+98
-34
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ Scan subnet for RTSP servers:
6666
./gons -net 192.168.0.1/24 -s rtsp
6767
```
6868

69+
Scan list of networks and hosts:
70+
71+
```sh
72+
./gons -list city_cidrs.txt -s rtsp
73+
```
74+
75+
```sh
76+
cat city_cidrs.txt | ./gons -s rtsp -list -
77+
```
78+
6979
## Testing
7080

7181
```sh

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ module github.com/fagci/gons
22

33
go 1.17
44

5-
require github.com/fagci/gonr v0.1.6
5+
require github.com/fagci/gonr v0.1.7

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github.com/fagci/gonr v0.1.6 h1:sqAztCeZzEkYXW480gdbK9WjIhV/m4dJkyLYk5sODm0=
2-
github.com/fagci/gonr v0.1.6/go.mod h1:k+bJomcfPjuSt1F7nJgrj6J5L+medRdCoEfQtGEIeTI=
1+
github.com/fagci/gonr v0.1.7 h1:h+o8kPK1Wi422HF7YC8IS2L2MFxRNt4ac3006eBVPjY=
2+
github.com/fagci/gonr v0.1.7/go.mod h1:k+bJomcfPjuSt1F7nJgrj6J5L+medRdCoEfQtGEIeTI=

main.go

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ var (
2020
iface string
2121
randomIPsCount int64
2222
cidrNetwork string
23+
ipList string
2324
scanWorkers int
2425
connTimeout time.Duration
2526
scanPorts string
@@ -38,6 +39,7 @@ func init() {
3839
flag.StringVar(&iface, "i", "", "use specific network interface")
3940
flag.Int64Var(&randomIPsCount, "n", -1, "generate N random WAN IPs")
4041
flag.StringVar(&cidrNetwork, "net", "", "Network in CIDR notation to scan in random order")
42+
flag.StringVar(&ipList, "list", "", "IP/networks list (CIDR) to scan in random order")
4143
flag.IntVar(&scanWorkers, "w", 64, "workers count")
4244
flag.IntVar(&scanWorkers, "workers", 64, "workers count")
4345
flag.DurationVar(&connTimeout, "t", 700*time.Millisecond, "scan connect timeout")
@@ -58,37 +60,7 @@ func init() {
5860
flag.BoolVar(&callbackE, "cbde", false, "disable callback errors")
5961
}
6062

61-
func main() {
62-
flag.Parse()
63-
64-
if iface != "" {
65-
if err := network.SetInterface(iface); err != nil {
66-
utils.EPrintln("[E] iface", err)
67-
return
68-
}
69-
utils.EPrintln("[i] Iface", iface)
70-
}
71-
72-
var ipSource <-chan net.IP
73-
if cidrNetwork == "" {
74-
ipGenerator := generators.NewIPGenerator(4, randomIPsCount)
75-
ipSource = ipGenerator.Generate()
76-
} else {
77-
ipSource = generators.RandomHostsFromCIDRGen(cidrNetwork)
78-
}
79-
processor := services.NewProcessor(ipSource, scanWorkers)
80-
81-
var cbFlags utils.Flags
82-
if !callbackE {
83-
cbFlags = cbFlags.Set(utils.ERR)
84-
}
85-
if !callbackW {
86-
cbFlags = cbFlags.Set(utils.WARN)
87-
}
88-
if !callbackI {
89-
cbFlags = cbFlags.Set(utils.INFO)
90-
}
91-
63+
func setupSercices(processor *services.Processor) {
9264
if service == "" {
9365
processor.AddService(services.NewDummyService())
9466
} else {
@@ -122,6 +94,19 @@ func main() {
12294
processor.AddService(svc)
12395
}
12496
}
97+
}
98+
99+
func process(processor *services.Processor) {
100+
var cbFlags utils.Flags
101+
if !callbackE {
102+
cbFlags = cbFlags.Set(utils.ERR)
103+
}
104+
if !callbackW {
105+
cbFlags = cbFlags.Set(utils.WARN)
106+
}
107+
if !callbackI {
108+
cbFlags = cbFlags.Set(utils.INFO)
109+
}
125110

126111
sp := utils.Spinner{}
127112
sp.Start()
@@ -154,3 +139,35 @@ func main() {
154139
}
155140
}
156141
}
142+
143+
func main() {
144+
flag.Parse()
145+
146+
if iface != "" {
147+
if err := network.SetInterface(iface); err != nil {
148+
utils.EPrintln("[E] iface", err)
149+
return
150+
}
151+
utils.EPrintln("[i] Iface", iface)
152+
}
153+
154+
var ipSource <-chan net.IP
155+
if ipList != "" {
156+
list, err := utils.LoadInput(ipList)
157+
if err != nil {
158+
utils.EPrintln("[E] IP list", err)
159+
return
160+
}
161+
ipSource = generators.RandomHostsFromListGen(list)
162+
} else if cidrNetwork == "" {
163+
ipGenerator := generators.NewIPGenerator(4, randomIPsCount)
164+
ipSource = ipGenerator.Generate()
165+
} else {
166+
ipSource = generators.RandomHostsFromCIDRGen(cidrNetwork)
167+
}
168+
169+
processor := services.NewProcessor(ipSource, scanWorkers)
170+
171+
setupSercices(processor)
172+
process(processor)
173+
}

utils/input.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package utils
2+
3+
import (
4+
"bufio"
5+
"errors"
6+
"os"
7+
"strings"
8+
9+
"github.com/fagci/gons/loaders"
10+
)
11+
12+
func fileExists(path string) bool {
13+
_, err := os.Stat(path)
14+
return !errors.Is(err, os.ErrNotExist)
15+
}
16+
17+
func LoadInput(input string) ([]string, error) {
18+
var lines []string
19+
var err error
20+
21+
switch {
22+
case input == "-":
23+
reader := bufio.NewScanner(os.Stdin)
24+
for reader.Scan() {
25+
lines = append(lines, reader.Text())
26+
}
27+
err = reader.Err()
28+
case fileExists(input):
29+
lines, err = loaders.FileToArray(input)
30+
default:
31+
lines = strings.FieldsFunc(input, func(c rune) bool {
32+
return c == '\n' || c == '\r'
33+
})
34+
}
35+
36+
return lines, err
37+
}

0 commit comments

Comments
 (0)