diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02d6e25 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +RealiTLScanner diff --git a/README.md b/README.md new file mode 100644 index 0000000..ddfd2be --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# Reality - Tls - Scanner + +Build +``` +go build +``` + +Usage + +Recommend to run this tool locally. It may cause VPS to be flagged if you run scanner in the cloud. +``` +./RealiTLScanner -addr www.microsoft.com +./RealiTLScanner -addr 20.81.111.85 +`` diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..e88a399 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module github.com/xtls/RealiTLScanner + +go 1.19 diff --git a/main.go b/main.go new file mode 100644 index 0000000..037e7c3 --- /dev/null +++ b/main.go @@ -0,0 +1,59 @@ +package main + +import ( + "crypto/tls" + "flag" + "fmt" + "net" + "time" +) + +func main() { + addrPtr := flag.String("addr", "127.0.0.1", "Destination to start scan") + portPtr := flag.String("port", "443", "Port to scan") + flag.Parse() + fmt.Println("Reality Tls Scanner running: ", *addrPtr, ":", *portPtr) + s := Scanner { + addr: *addrPtr, + port: *portPtr, + timeout: 10 * time.Second, + numberOfThread: 1, + } + s.Run() +} + +type Scanner struct { + addr string + port string + timeout time.Duration + numberOfThread int +} + +func (s Scanner) Run() { + conn, err := net.DialTimeout("tcp", s.addr+":"+s.port, s.timeout) + if err != nil { + fmt.Println("Dial failed: ", err) + return + } + line := "" + conn.RemoteAddr().String() + " \t----- " + conn.SetDeadline(time.Now().Add(s.timeout)) + c := tls.Client(conn, &tls.Config { + InsecureSkipVerify: true, + NextProtos: []string{"h2", "http/1.1"}, + }) + err = c.Handshake() + if err != nil { + fmt.Println("", line, "TLS handshake failed: ", err) + return + } + defer c.Close() + state := c.ConnectionState() + fmt.Println("", line, "Found TLS v", TlsDic[state.Version], "\tALPN", state.NegotiatedProtocol, "\t", state.PeerCertificates[0].Subject) +} + +var TlsDic = map[uint16]string{ + 0x0301: "1.0", + 0x0302: "1.1", + 0x0303: "1.2", + 0x0304: "1.3", +}