Skip to content

Commit 96c5362

Browse files
committed
update: spider spider-mutlithreading with super cool statusbar metrics
1 parent 20154d8 commit 96c5362

File tree

6 files changed

+59
-10
lines changed

6 files changed

+59
-10
lines changed

cmd/all/all.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ var AllCmd = &cobra.Command{
4646
}
4747

4848
func Run(net *net.IPNet) {
49-
var records define.Records = scanner.ScanSubnet(net)
49+
var records define.Records = scanner.ScanSubnet(net, nil)
5050
if records == nil || len(records) == 0 {
5151
log.Warnf("ScanSubnet Found Nothing")
5252
return

cmd/subnet/subnet.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ var SubNetCmd = &cobra.Command{
3939
}
4040

4141
func Run(net *net.IPNet) {
42-
var records define.Records = scanner.ScanSubnet(net)
42+
var records define.Records = scanner.ScanSubnet(net, nil)
4343
if records == nil || len(records) == 0 {
4444
log.Warnf("ScanSubnet Found Nothing")
4545
return

go.mod

+7
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,20 @@ module github.com/esonhugh/k8spider
33
go 1.19
44

55
require (
6+
github.com/cheggaaa/pb/v3 v3.1.5
67
github.com/miekg/dns v1.1.58
78
github.com/sirupsen/logrus v1.9.0
89
github.com/spf13/cobra v1.5.0
910
)
1011

1112
require (
13+
github.com/VividCortex/ewma v1.2.0 // indirect
14+
github.com/fatih/color v1.15.0 // indirect
1215
github.com/inconshreveable/mousetrap v1.0.0 // indirect
16+
github.com/mattn/go-colorable v0.1.13 // indirect
17+
github.com/mattn/go-isatty v0.0.19 // indirect
18+
github.com/mattn/go-runewidth v0.0.15 // indirect
19+
github.com/rivo/uniseg v0.2.0 // indirect
1320
github.com/spf13/pflag v1.0.5 // indirect
1421
github.com/stretchr/testify v1.8.0 // indirect
1522
golang.org/x/mod v0.14.0 // indirect

go.sum

+17
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
1+
github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow=
2+
github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4=
3+
github.com/cheggaaa/pb/v3 v3.1.5 h1:QuuUzeM2WsAqG2gMqtzaWithDJv0i+i6UlnwSCI4QLk=
4+
github.com/cheggaaa/pb/v3 v3.1.5/go.mod h1:CrxkeghYTXi1lQBEI7jSn+3svI3cuc19haAj6jM60XI=
15
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
26
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
37
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
48
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9+
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
10+
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
511
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
612
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
13+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
14+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
15+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
16+
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
17+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
18+
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
19+
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
720
github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
821
github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
922
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1023
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
24+
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
25+
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
1126
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
1227
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
1328
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
@@ -27,6 +42,8 @@ golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
2742
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
2843
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
2944
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
45+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
46+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
3047
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
3148
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
3249
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=

pkg/mutli/subnet.go

+18-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"net"
55
"sync"
66

7+
"github.com/cheggaaa/pb/v3"
78
"github.com/esonhugh/k8spider/define"
89
"github.com/esonhugh/k8spider/pkg"
910
"github.com/esonhugh/k8spider/pkg/scanner"
@@ -27,21 +28,34 @@ func (s *SubnetScanner) ScanSubnet(subnet *net.IPNet) <-chan []define.Record {
2728
}
2829
out := make(chan []define.Record, 100)
2930
go func() {
31+
var pblist []*pb.ProgressBar
32+
var pool *pb.Pool
3033
if subnets, err := pkg.SubnetShift(subnet, 4); err != nil {
31-
go s.scan(subnet, out)
34+
go s.scan(subnet, out, nil)
3235
} else {
36+
// start pool
3337
for _, sn := range subnets {
34-
go s.scan(sn, out)
38+
pblist = append(pblist, pb.New(len(pkg.ParseIPNetToIPs(sn))))
39+
}
40+
pool, err = pb.StartPool(pblist...)
41+
if err != nil {
42+
panic(err)
43+
}
44+
for i, sn := range subnets {
45+
go s.scan(sn, out, pblist[i])
3546
}
3647
}
3748
s.wg.Wait()
3849
close(out)
50+
if len(pblist) > 0 {
51+
_ = pool.Stop()
52+
}
3953
}()
4054
return out
4155
}
4256

43-
func (s *SubnetScanner) scan(subnet *net.IPNet, to chan []define.Record) {
57+
func (s *SubnetScanner) scan(subnet *net.IPNet, to chan []define.Record, pb *pb.ProgressBar) {
4458
s.wg.Add(1)
45-
to <- scanner.ScanSubnet(subnet)
59+
to <- scanner.ScanSubnet(subnet, pb)
4660
s.wg.Done()
4761
}

pkg/scanner/scanner.go

+15-4
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,36 @@ import (
44
"net"
55
"strings"
66

7+
"github.com/cheggaaa/pb/v3"
78
"github.com/esonhugh/k8spider/define"
89
"github.com/esonhugh/k8spider/pkg"
910
"github.com/miekg/dns"
1011
log "github.com/sirupsen/logrus"
1112
)
1213

13-
func ScanSubnet(subnet *net.IPNet) (records []define.Record) {
14-
for _, ip := range pkg.ParseIPNetToIPs(subnet) {
14+
var BarTemplate = `{{ string . "subnet" }} {{ bar . "[" "-" (cycle . ">" ) "." "]"}} {{speed . }} {{percent .}}`
15+
16+
func ScanSubnet(subnet *net.IPNet, optPb *pb.ProgressBar) (records []define.Record) {
17+
subnetIPlist := pkg.ParseIPNetToIPs(subnet)
18+
var bar *pb.ProgressBar
19+
if optPb != nil {
20+
bar = optPb.SetTemplateString(BarTemplate).Start()
21+
} else {
22+
bar = pb.ProgressBarTemplate(BarTemplate).Start(len(subnetIPlist))
23+
}
24+
bar.Set("subnet", subnet.String())
25+
for _, ip := range subnetIPlist {
1526
ptr := pkg.PTRRecord(ip)
1627
if len(ptr) > 0 {
1728
for _, domain := range ptr {
1829
log.Infof("PTRrecord %v --> %v", ip, domain)
1930
r := define.Record{Ip: ip, SvcDomain: domain}
2031
records = append(records, r)
2132
}
22-
} else {
23-
continue
2433
}
34+
bar.Increment()
2535
}
36+
bar.Finish()
2637
return
2738
}
2839

0 commit comments

Comments
 (0)