|
|
@@ -0,0 +1,75 @@ |
|
|
|
package main |
|
|
|
|
|
|
|
import ( |
|
|
|
"bufio" |
|
|
|
"crypto/tls" |
|
|
|
"flag" |
|
|
|
"fmt" |
|
|
|
"io" |
|
|
|
"net/http" |
|
|
|
"net/url" |
|
|
|
"os" |
|
|
|
) |
|
|
|
|
|
|
|
var tlsVersionToName = map[string]uint16{ |
|
|
|
"tls10": tls.VersionTLS10, |
|
|
|
"tls11": tls.VersionTLS11, |
|
|
|
"tls12": tls.VersionTLS12, |
|
|
|
"tls13": tls.VersionTLS13, |
|
|
|
} |
|
|
|
|
|
|
|
// Usage client args host:port |
|
|
|
func main() { |
|
|
|
var version string |
|
|
|
var addr string |
|
|
|
var enableEMS bool |
|
|
|
var resume bool |
|
|
|
var config tls.Config |
|
|
|
var cache tls.ClientSessionCache |
|
|
|
cache = tls.NewLRUClientSessionCache(0) |
|
|
|
flag.StringVar(&version, "version", "tls12", "Version of TLS to use") |
|
|
|
flag.BoolVar(&enableEMS, "m", false, "Enable EMS") |
|
|
|
flag.BoolVar(&resume, "r", false, "Attempt Resumption") |
|
|
|
flag.Parse() |
|
|
|
config.MinVersion = tlsVersionToName[version] |
|
|
|
config.MaxVersion = tlsVersionToName[version] |
|
|
|
config.InsecureSkipVerify = true |
|
|
|
config.UseExtendedMasterSecret = !enableEMS |
|
|
|
config.ClientSessionCache = cache |
|
|
|
var iters int |
|
|
|
if resume { |
|
|
|
iters = 2 |
|
|
|
} else { |
|
|
|
iters = 1 |
|
|
|
} |
|
|
|
addr = flag.Arg(0) |
|
|
|
for ; iters > 0; iters-- { |
|
|
|
conn, err := tls.Dial("tcp", addr, &config) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Error %s", err) |
|
|
|
os.Exit(1) |
|
|
|
} |
|
|
|
var req http.Request |
|
|
|
var response *http.Response |
|
|
|
req.Method = "GET" |
|
|
|
req.URL, err = url.Parse("https://" + addr + "/") |
|
|
|
if err != nil { |
|
|
|
fmt.Println("Failed to parse url") |
|
|
|
os.Exit(1) |
|
|
|
} |
|
|
|
req.Write(conn) |
|
|
|
reader := bufio.NewReader(conn) |
|
|
|
response, err = http.ReadResponse(reader, nil) |
|
|
|
if err != nil { |
|
|
|
fmt.Println("HTTP problem") |
|
|
|
fmt.Println(err) |
|
|
|
os.Exit(1) |
|
|
|
} |
|
|
|
io.Copy(os.Stdout, response.Body) |
|
|
|
conn.Close() |
|
|
|
if resume && iters == 2 { |
|
|
|
fmt.Println("Attempting resumption") |
|
|
|
} |
|
|
|
} |
|
|
|
os.Exit(0) |
|
|
|
} |