diagd: only listen on private addresses

This commit is contained in:
Michael Stapelberg 2018-06-26 09:47:55 +02:00
parent 89e1276ad4
commit 86c9436e98

View File

@ -7,12 +7,33 @@ import (
"html" "html"
"io" "io"
"log" "log"
"net"
"net/http" "net/http"
"os"
"os/signal"
"sync" "sync"
"syscall"
"github.com/gokrazy/gokrazy"
"router7/internal/diag" "router7/internal/diag"
"router7/internal/multilisten"
) )
var httpListeners = multilisten.NewPool()
func updateListeners() error {
hosts, err := gokrazy.PrivateInterfaceAddrs()
if err != nil {
return err
}
httpListeners.ListenAndServe(hosts, func(host string) multilisten.Listener {
return &http.Server{Addr: net.JoinHostPort(host, "7733")}
})
return nil
}
func dump(w io.Writer, re *diag.EvalResult) { func dump(w io.Writer, re *diag.EvalResult) {
symbol := "✔" symbol := "✔"
if re.Error { if re.Error {
@ -50,8 +71,15 @@ func logic() error {
fmt.Fprintf(w, `<!DOCTYPE html><style type="text/css">ul { list-style-type: none; }</style><ul>`) fmt.Fprintf(w, `<!DOCTYPE html><style type="text/css">ul { list-style-type: none; }</style><ul>`)
dump(w, re) dump(w, re)
}) })
// TODO: only listen on private IP addresses updateListeners()
return http.ListenAndServe(":7733", nil) ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGUSR1)
for range ch {
if err := updateListeners(); err != nil {
log.Printf("updateListeners: %v", err)
}
}
return nil
} }
func main() { func main() {