Browse Source

adjust external ip

刘河 5 years ago
parent
commit
91c1ffc6ce
2 changed files with 19 additions and 4 deletions
  1. 13 2
      lib/common/util.go
  2. 6 2
      server/proxy/socks5.go

+ 13 - 2
lib/common/util.go

@@ -109,8 +109,8 @@ func ChangeHostAndHeader(r *http.Request, host string, header string, addr strin
 	}
 	addr = strings.Split(addr, ":")[0]
 	if prior, ok := r.Header["X-Forwarded-For"]; ok {
-    		addr = strings.Join(prior, ", ") + ", " + addr
-    	}
+		addr = strings.Join(prior, ", ") + ", " + addr
+	}
 	r.Header.Set("X-Forwarded-For", addr)
 	r.Header.Set("X-Real-IP", addr)
 }
@@ -396,3 +396,14 @@ func GetExtFromPath(path string) string {
 	}
 	return string(re.Find([]byte(s[0])))
 }
+
+
+func GetExternalIp() string {
+	resp, err := http.Get("http://myexternalip.com/raw")
+	if err != nil {
+		return ""
+	}
+	defer resp.Body.Close()
+	content, _ := ioutil.ReadAll(resp.Body)
+	return string(content)
+}

+ 6 - 2
server/proxy/socks5.go

@@ -174,7 +174,12 @@ func (s *Sock5ModeServer) sendUdpReply(writeConn net.Conn, c net.Conn, rep uint8
 
 }
 
+var serveExternalIp string
+
 func (s *Sock5ModeServer) handleUDP(c net.Conn) {
+	if serveExternalIp == "" {
+		serveExternalIp = common.GetExternalIp()
+	}
 	defer c.Close()
 	addrType := make([]byte, 1)
 	c.Read(addrType)
@@ -213,9 +218,8 @@ func (s *Sock5ModeServer) handleUDP(c net.Conn) {
 		logs.Error("listen local reply udp port error")
 		return
 	}
-
 	// reply the local addr
-	s.sendUdpReply(c, reply, succeeded, "106.12.146.199")
+	s.sendUdpReply(c, reply, succeeded, serveExternalIp)
 	defer reply.Close()
 
 	// new a tunnel to client