From 97a29ed361f8db833521a872183d041e172727b4 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Tue, 2 Feb 2021 23:09:03 +0100 Subject: upload-svr.go: print interface addresses Every time I need to invoke `ip addr` or `ifconfig` to find addresses, might as well save some time by printing the local addresses directly. --- upload-svr.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'upload-svr.go') diff --git a/upload-svr.go b/upload-svr.go index 2564f6b..9edb808 100644 --- a/upload-svr.go +++ b/upload-svr.go @@ -13,6 +13,7 @@ import ( "html" "io" "log" + "net" "net/http" "os" "path" @@ -374,6 +375,11 @@ func main() { if certFile != "" && keyFile == "" { keyFile = certFile } + host, port, err := net.SplitHostPort(address) + if err != nil { + log.Printf("Unable to parse address \"%s\": %s", address, err) + return + } http.HandleFunc("/favicon.ico", http.NotFound) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { @@ -419,9 +425,11 @@ func main() { log.Println("SHA1 Fingerprint: ", formatFingerprint(sha1sum[:])) log.Println("Listening at", server.Addr, "using TLS") + showInterfaces("https", host, port) log.Fatal(server.ListenAndServeTLS("", "")) } else { log.Println("Listening at", address) + showInterfaces("http", host, port) log.Fatal(http.ListenAndServe(address, nil)) } } @@ -439,6 +447,44 @@ func formatFingerprint(certData []byte) string { return string(out) } +func showInterfaces(scheme, host, port string) { + var addresses []string + if host != "" { + ips, err := net.LookupIP(host) + if err != nil { + log.Printf("Unable to resolve host: %s", err) + return + } + for _, ip := range ips { + addresses = append(addresses, ip.String()) + } + } + + // if no addresses are found, assume the wildcards interface. + if len(addresses) == 0 { + addrs, err := net.InterfaceAddrs() + if err != nil { + log.Printf("Unable to retrieve interface addresses: %s", err) + return + } + for _, addr := range addrs { + ip, _, err := net.ParseCIDR(addr.String()) + if err != nil { + log.Printf("Unable to parse interface address \"%s\": %s", addr, err) + continue + } + if ip.IsLoopback() { + continue + } + addresses = append(addresses, ip.String()) + } + } + + for _, addr := range addresses { + log.Printf("Connect to: %s://%s", scheme, net.JoinHostPort(addr, port)) + } +} + const uploadHtml = ` -- cgit v1.2.1