mirror of
https://github.com/XTLS/RealiTLScanner.git
synced 2026-09-27 01:30:47 +03:00
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
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",
|
|
}
|