From 18937e1e4a6dbf9a803f9757761d0a6785a19c64 Mon Sep 17 00:00:00 2001 From: Andrii Ursulenko Date: Tue, 18 Jul 2023 13:43:11 +0300 Subject: [PATCH] add colored output --- .gitignore | 1 + Plugins/icmp.go | 9 +++++---- Plugins/scanner.go | 7 ++++--- common/log.go | 31 +++++++++++++++++++++---------- go.mod | 5 ++++- go.sum | 11 +++++++++++ 6 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..387c605 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result.txt diff --git a/Plugins/icmp.go b/Plugins/icmp.go index bde11d5..6d0773f 100644 --- a/Plugins/icmp.go +++ b/Plugins/icmp.go @@ -3,6 +3,7 @@ package Plugins import ( "bytes" "fmt" + "github.com/fatih/color" "github.com/shadow1ng/fscan/common" "golang.org/x/net/icmp" "net" @@ -26,11 +27,11 @@ func CheckLive(hostslist []string, Ping bool) []string { for ip := range chanHosts { if _, ok := ExistHosts[ip]; !ok && IsContain(hostslist, ip) { ExistHosts[ip] = struct{}{} - if common.Silent == false { - if Ping == false { - fmt.Printf("(icmp) Target %-15s is alive\n", ip) + if !common.Silent { + if !Ping { + color.Green("(icmp) Target %-15s is alive\n", ip) } else { - fmt.Printf("(ping) Target %-15s is alive\n", ip) + color.Green("(ping) Target %-15s is alive\n", ip) } } AliveHosts = append(AliveHosts, ip) diff --git a/Plugins/scanner.go b/Plugins/scanner.go index 58c2c3a..c877e12 100644 --- a/Plugins/scanner.go +++ b/Plugins/scanner.go @@ -2,6 +2,7 @@ package Plugins import ( "fmt" + "github.com/fatih/color" "github.com/shadow1ng/fscan/WebScan/lib" "github.com/shadow1ng/fscan/common" "reflect" @@ -25,7 +26,7 @@ func Scan(info common.HostInfo) { if len(Hosts) > 0 || len(common.HostPort) > 0 { if common.NoPing == false && len(Hosts) > 0 { Hosts = CheckLive(Hosts, common.Ping) - fmt.Println("[*] Icmp alive hosts len is:", len(Hosts)) + color.Cyan("[*] Icmp alive hosts len is: %d", len(Hosts)) } if common.Scantype == "icmp" { common.LogWG.Wait() @@ -40,7 +41,7 @@ func Scan(info common.HostInfo) { AlivePorts = NoPortScan(Hosts, info.Ports) } else if len(Hosts) > 0 { AlivePorts = PortScan(Hosts, info.Ports, common.Timeout) - fmt.Println("[*] alive ports len is:", len(AlivePorts)) + color.Cyan("[*] alive ports len is: %d", len(AlivePorts)) if common.Scantype == "portscan" { common.LogWG.Wait() return @@ -50,7 +51,7 @@ func Scan(info common.HostInfo) { AlivePorts = append(AlivePorts, common.HostPort...) AlivePorts = common.RemoveDuplicate(AlivePorts) common.HostPort = nil - fmt.Println("[*] AlivePorts len is:", len(AlivePorts)) + color.Cyan("[*] AlivePorts len is:", len(AlivePorts)) } common.GC() var severports []string //severports := []string{"21","22","135"."445","1433","3306","5432","6379","9200","11211","27017"...} diff --git a/common/log.go b/common/log.go index 574dba7..5ce7d70 100644 --- a/common/log.go +++ b/common/log.go @@ -2,6 +2,7 @@ package common import ( "fmt" + "github.com/fatih/color" "os" "strings" "sync" @@ -31,12 +32,18 @@ func LogSuccess(result string) { func SaveLog() { for result := range Results { - if Silent == false || strings.Contains(*result, "[+]") || strings.Contains(*result, "[*]") { - fmt.Println(*result) + if !Silent { + if strings.Contains(*result, "[+]") { + color.Green(*result) + } else if strings.Contains(*result, "[*]") { + color.Cyan(*result) + } } + if IsSave { WriteFile(*result, Outputfile) } + LogWG.Done() } } @@ -48,19 +55,23 @@ func WriteFile(result string, filename string) { fmt.Printf("Open %s error, %v\n", filename, err) return } - _, err = fl.Write(text) - fl.Close() - if err != nil { + + defer func() { + _ = fl.Close() + }() + + if _, err := fl.Write(text); err != nil { fmt.Printf("Write %s error, %v\n", filename, err) } } func LogError(errinfo interface{}) { - if WaitTime == 0 { - fmt.Printf("已完成 %v/%v %v \n", End, Num, errinfo) - } else if (time.Now().Unix()-LogSucTime) > WaitTime && (time.Now().Unix()-LogErrTime) > WaitTime { - fmt.Printf("已完成 %v/%v %v \n", End, Num, errinfo) - LogErrTime = time.Now().Unix() + if WaitTime == 0 || (time.Now().Unix()-LogSucTime) > WaitTime && (time.Now().Unix()-LogErrTime) > WaitTime { + color.Red(fmt.Sprintf("Completed %v/%v %v \n", End, Num, errinfo)) + + if WaitTime != 0 { + LogErrTime = time.Now().Unix() + } } } diff --git a/go.mod b/go.mod index 2aa860c..b876c52 100644 --- a/go.mod +++ b/go.mod @@ -26,6 +26,7 @@ require ( require ( github.com/BurntSushi/toml v0.3.1 // indirect github.com/antlr/antlr4/runtime/Go/antlr v1.4.10 // indirect + github.com/fatih/color v1.15.0 // indirect github.com/geoffgarside/ber v1.1.0 // indirect github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect @@ -34,6 +35,8 @@ require ( github.com/huin/asn1ber v0.0.0-20120622192748-af09f62e6358 // indirect github.com/icodeface/tls v0.0.0-20190904083142-17aec93c60e5 // indirect github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect go.uber.org/atomic v1.5.0 // indirect go.uber.org/multierr v1.3.0 // indirect @@ -41,7 +44,7 @@ require ( go.uber.org/zap v1.14.0 // indirect golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/sys v0.5.0 // indirect + golang.org/x/sys v0.10.0 // indirect golang.org/x/tools v0.1.12 // indirect honnef.co/go/tools v0.0.1-2019.2.3 // indirect ) diff --git a/go.sum b/go.sum index b3ea020..49d8329 100644 --- a/go.sum +++ b/go.sum @@ -46,6 +46,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/geoffgarside/ber v1.1.0 h1:qTmFG4jJbwiSzSXoNJeHcOprVzZ8Ulde2Rrrifu5U9w= @@ -156,7 +158,12 @@ github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0 github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -341,8 +348,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=