From b80ea1316f1d426aeff2352e3cc875b8c815b1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=B1=E8=88=9E=E8=80=85?= Date: Fri, 7 Jan 2022 10:51:36 +0800 Subject: [PATCH] =?UTF-8?q?ip/8=E6=97=B6,=E5=8F=AA=E6=8E=A2=E6=B5=8B?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=9C=BA=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/Parse.go | 14 ++++++++++++++ common/ParseIP.go | 41 ++++++++++++++++++++++++++++++++++++++++- common/flag.go | 2 ++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/common/Parse.go b/common/Parse.go index 9f38a4f..163a8dd 100644 --- a/common/Parse.go +++ b/common/Parse.go @@ -128,6 +128,20 @@ func ParseInput(Info *HostInfo) { Info.Ports += "," + PortAdd } } + + if UserAdd != "" { + user := strings.Split(UserAdd, ",") + for a, _ := range Userdict { + Userdict[a] = append(Userdict[a], user...) + Userdict[a] = RemoveDuplicate(Userdict[a]) + } + } + + if PassAdd != "" { + pass := strings.Split(PassAdd, ",") + Passwords = append(Passwords, pass...) + Passwords = RemoveDuplicate(Passwords) + } } func ParseScantype(Info *HostInfo) { diff --git a/common/ParseIP.go b/common/ParseIP.go index c838af2..470e3b8 100644 --- a/common/ParseIP.go +++ b/common/ParseIP.go @@ -4,6 +4,7 @@ import ( "bufio" "errors" "fmt" + "math/rand" "net" "os" "regexp" @@ -77,6 +78,9 @@ func ParseIPs(ip string) (hosts []string) { func parseIP(ip string) []string { reg := regexp.MustCompile(`[a-zA-Z]+`) switch { + // 扫描/8时,只扫网关和随机IP,避免扫描过多IP + case strings.HasSuffix(ip, "/8"): + return parseIP8(ip) //解析 /24 /16 /8 /xxx 等 case strings.Contains(ip, "/"): return parseIP2(ip) @@ -110,7 +114,8 @@ func parseIP2(host string) (hosts []string) { return } -// 解析ip段: 192.168.111.1-255,192.168.111.1-192.168.112.255 +// 解析ip段: 192.168.111.1-255 +// 192.168.111.1-192.168.112.255 func parseIP1(ip string) []string { IPRange := strings.Split(ip, "-") testIP := net.ParseIP(IPRange[0]) @@ -202,3 +207,37 @@ func RemoveDuplicate(old []string) []string { } return result } + +func parseIP8(ip string) []string { + realIP := ip[:len(ip)-2] + testIP := net.ParseIP(realIP) + + if testIP == nil { + return nil + } + + IPrange := strings.Split(ip, ".")[0] + var AllIP []string + for a := 0; a <= 255; a++ { + for b := 0; b <= 255; b++ { + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, 1)) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, 2)) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, 4)) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, 5)) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, RandInt(6, 55))) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, RandInt(56, 100))) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, RandInt(101, 150))) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, RandInt(151, 200))) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, RandInt(201, 253))) + AllIP = append(AllIP, fmt.Sprintf("%s.%d.%d.%d", IPrange, a, b, 254)) + } + } + return AllIP +} + +func RandInt(min, max int) int { + if min >= max || min == 0 || max == 0 { + return max + } + return rand.Intn(max-min) + min +} diff --git a/common/flag.go b/common/flag.go index 20fefd4..343ce82 100644 --- a/common/flag.go +++ b/common/flag.go @@ -22,6 +22,8 @@ func Flag(Info *HostInfo) { flag.StringVar(&NoHosts, "hn", "", "the hosts no scan,as: -hn 192.168.1.1/24") flag.StringVar(&Info.Ports, "p", DefaultPorts, "Select a port,for example: 22 | 1-65535 | 22,80,3306") flag.StringVar(&PortAdd, "pa", "", "add port base DefaultPorts,-pa 3389") + flag.StringVar(&UserAdd, "usera", "", "add port base DefaultUsers,-usera user") + flag.StringVar(&PassAdd, "pwda", "", "add port base DefaultPasses,-pwda password") flag.StringVar(&NoPorts, "pn", "", "the ports no scan,as: -pn 445") flag.StringVar(&Info.Command, "c", "", "exec command (ssh)") flag.StringVar(&Info.SshKey, "sshkey", "", "sshkey file (id_rsa)")