summaryrefslogtreecommitdiff
path: root/upload-svr.go
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2021-02-02 23:09:03 +0100
committerPeter Wu <peter@lekensteyn.nl>2021-02-02 23:09:03 +0100
commit97a29ed361f8db833521a872183d041e172727b4 (patch)
treede7ccebcb0f74455814bcda0d70f43e43a587b2d /upload-svr.go
parent5247c98932c747ff163c6c69b475b2516bc38ce1 (diff)
downloadscripts-97a29ed361f8db833521a872183d041e172727b4.tar.gz
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.
Diffstat (limited to 'upload-svr.go')
-rw-r--r--upload-svr.go46
1 files changed, 46 insertions, 0 deletions
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 = `
<!doctype html>
<meta charset="UTF-8">