From 616cf118800f10217ce515a76f65dfa63fff30ae Mon Sep 17 00:00:00 2001 From: ilanyu Date: Mon, 16 Apr 2018 19:47:33 +0800 Subject: [PATCH] change dns server --- cmd.go | 2 ++ handle.go | 19 +++++++++---------- main.go | 3 ++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cmd.go b/cmd.go index 125673f..479bbd9 100644 --- a/cmd.go +++ b/cmd.go @@ -5,12 +5,14 @@ import "flag" type Cmd struct { bind string remote string + ip string } func parseCmd() Cmd { var cmd Cmd flag.StringVar(&cmd.bind, "l", "0.0.0.0:8888", "listen on ip:port") flag.StringVar(&cmd.remote, "r", "http://idea.lanyus.com:80", "reverse proxy addr") + flag.StringVar(&cmd.ip, "ip", "", "reverse proxy addr server ip") flag.Parse() return cmd } \ No newline at end of file diff --git a/handle.go b/handle.go index 8b477c4..f9326d5 100644 --- a/handle.go +++ b/handle.go @@ -7,8 +7,9 @@ import ( "log" "net" "time" - "io/ioutil" "context" + "github.com/bogdanovich/dns_resolver" + "strings" ) type handle struct { @@ -27,19 +28,17 @@ func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) { DualStack: true, } http.DefaultTransport.(*http.Transport).DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { - if addr == "idea.lanyus.com:80" { - resp, err := http.Get("http://119.29.29.29/d?dn=idea.lanyus.com") + remote := strings.Split(addr, ":") + if cmd.ip == "" { + resolver := dns_resolver.New([]string{"114.114.114.114", "114.114.115.115", "119.29.29.29", "223.5.5.5", "8.8.8.8", "208.67.222.222", "208.67.220.220"}) + resolver.RetryTimes = 5 + ip, err := resolver.LookupHost(remote[0]) if err != nil { log.Println(err) } - defer resp.Body.Close() - res, err := ioutil.ReadAll(resp.Body) - if err != nil { - log.Println(err) - } - addr = string(res) + ":80" + cmd.ip = ip[0].String() } - + addr = cmd.ip + ":" + remote[1] return dialer.DialContext(ctx, network, addr) } proxy := httputil.NewSingleHostReverseProxy(remote) diff --git a/main.go b/main.go index 025bf77..05c1f68 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "log" ) +var cmd Cmd var srv http.Server func StartServer(bind string, remote string) { @@ -26,6 +27,6 @@ func StopServer() { } func main() { - cmd := parseCmd() + cmd = parseCmd() StartServer(cmd.bind, cmd.remote) }