From a3fef9762dd21a3d4b6c3a287b28c7c4af779ac3 Mon Sep 17 00:00:00 2001 From: kisesy Date: Tue, 2 Jan 2018 15:14:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81ScanMinRTT=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.json | 2 +- gscan.go | 2 +- quic.go | 10 ++++++---- sni.go | 12 ++++++++---- tls.go | 6 +++++- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/config.json b/config.json index 61c27cc..b028cc1 100644 --- a/config.json +++ b/config.json @@ -1,7 +1,7 @@ { // 注意: // [扫描并发数] 理论上设置越大扫的越快, 但是并不意味越大就可以扫到更多IP - // 大量的并发数, 会造成网络堵塞, 甚至触到系统网络的限制或造成路由器宕机而出现更多的问题 + // 大量的并发, 会造成网络堵塞, 甚至触到系统网络的限制或造成路由器宕机而出现更多的问题 // 所以如果在你那里基本扫不到IP, 可以试着减小扫描并发数并增大超时时间 // 新添了 Level 设置 diff --git a/gscan.go b/gscan.go index e8d899a..83a9f63 100644 --- a/gscan.go +++ b/gscan.go @@ -188,7 +188,7 @@ func main() { log.Printf("All results writed to %s\n", cfg.OutputFile) } if Config.EnableBackup { - filename := operation + "_" + time.Now().Format("20060102_150405") + ".txt" + filename := fmt.Sprintf("%s_%s_lv%d.txt", operation, time.Now().Format("20060102_150405"), cfg.Level) bakfilename := filepath.Join(Config.BackupDir, filename) if err := ioutil.WriteFile(bakfilename, b.Bytes(), 0644); err != nil { log.Printf("Failed to write output file:%s for reason:%v\n", bakfilename, err) diff --git a/quic.go b/quic.go index 2f24b22..e60d8cb 100644 --- a/quic.go +++ b/quic.go @@ -97,9 +97,7 @@ func testQuic(ip string, config *GScanConfig, record *ScanRecord) bool { if resp.Body != nil { defer resp.Body.Close() // lv4 验证是否是 NoSuchBucket 错误 - - // 也许条件改为 || 更好 - if config.Quic.Level > 3 && resp.Header.Get("Content-Type") == "application/xml; charset=UTF-8" { + if config.Quic.Level > 3 && resp.Header.Get("Content-Type") == "application/xml; charset=UTF-8" { // 也许条件改为 || 更好 body, err := ioutil.ReadAll(resp.Body) if err != nil || bytes.Equal(body, errNoSuchBucket) { return false @@ -110,6 +108,10 @@ func testQuic(ip string, config *GScanConfig, record *ScanRecord) bool { } } - record.RTT = record.RTT + time.Since(start) + rtt := time.Since(start) + if rtt < config.Quic.ScanMinRTT { + return false + } + record.RTT += rtt return true } diff --git a/sni.go b/sni.go index e933a53..eaedf6a 100644 --- a/sni.go +++ b/sni.go @@ -12,9 +12,9 @@ func testSni(ip string, config *GScanConfig, record *ScanRecord) bool { tlscfg := &tls.Config{ InsecureSkipVerify: true, } - start := time.Now() for _, serverName := range config.Sni.ServerName { + start := time.Now() conn, err := net.DialTimeout("tcp", net.JoinHostPort(ip, "443"), config.Sni.ScanMaxRTT) if err != nil { return false @@ -55,10 +55,14 @@ func testSni(ip string, config *GScanConfig, record *ScanRecord) bool { return false } } + tlsconn.Close() - } - // record.RTT = record.RTT + time.Since(start)/time.Duration(len(config.Sni.ServerName)) - record.RTT = record.RTT + time.Duration(int64(time.Since(start))/int64(len(config.Sni.ServerName))) + rtt := time.Since(start) + if rtt < config.Sni.ScanMinRTT { + return false + } + record.RTT += rtt + } return true } diff --git a/tls.go b/tls.go index 41bfbbb..e8fca2c 100644 --- a/tls.go +++ b/tls.go @@ -86,6 +86,10 @@ func testTls(ip string, config *GScanConfig, record *ScanRecord) bool { resp.Body.Close() } } - record.RTT = record.RTT + time.Since(start) + rtt := time.Since(start) + if rtt < config.Tls.ScanMinRTT { + return false + } + record.RTT += rtt return true }