diff --git a/main.go b/main.go new file mode 100644 index 0000000..90b10d0 --- /dev/null +++ b/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + "net/http/httputil" + "net/url" + "os" +) + +func main() { + fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) + proxy := fs.String("proxy", "http://10.9.3.1:64932", "addr to proxy to") + listen := fs.String("listen", "127.0.0.1:63443", "addr to listen on") + if err := fs.Parse(os.Args[1:]); err != nil { + log.Fatal(err) + } + + u, err := url.Parse(*proxy) + if err != nil { + log.Fatal(err) + } + + log.Println("listening on", *listen) + if err := http.ListenAndServe(*listen, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + p := httputil.NewSingleHostReverseProxy(u) + p.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) { + fmt.Fprintf(w, ` + +
+ +

The internet is not connected

+
+

%s

+ + + + `, err.Error()) + } + p.ServeHTTP(w, r) + })); err != nil { + log.Fatal(err) + } +}