47 lines
995 B
Go
47 lines
995 B
Go
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, `
|
|
<html>
|
|
<header></header>
|
|
<body>
|
|
<h2>The internet is not connected</h2>
|
|
<br>
|
|
<p>%s</p>
|
|
</body>
|
|
<footer></footer>
|
|
</html>
|
|
`, err.Error())
|
|
}
|
|
p.ServeHTTP(w, r)
|
|
})); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|