Skip to content

Commit 381ffd9

Browse files
committed
v1.2
1 parent 345df7c commit 381ffd9

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

handle.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,45 @@ import (
55
"net/url"
66
"net/http/httputil"
77
"log"
8+
"net"
9+
"context"
10+
"time"
11+
"io/ioutil"
812
)
913

1014
type handle struct {
1115
reverseProxy string
1216
}
1317

1418
func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) {
19+
log.Println(r.RemoteAddr + " " + r.Method + " " + r.URL.String() + " " + r.Proto + " " + r.UserAgent())
1520
remote, err := url.Parse(this.reverseProxy)
1621
if err != nil {
1722
log.Fatalln(err)
1823
}
24+
25+
dialer := &net.Dialer{
26+
Timeout: 30 * time.Second,
27+
KeepAlive: 30 * time.Second,
28+
DualStack: true,
29+
}
30+
http.DefaultTransport.(*http.Transport).DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
31+
if addr == "idea.lanyus.com:80" {
32+
resp, err := http.Get("http://119.29.29.29/d?dn=idea.lanyus.com")
33+
if err != nil {
34+
log.Println(err)
35+
}
36+
defer resp.Body.Close()
37+
res, err := ioutil.ReadAll(resp.Body)
38+
if err != nil {
39+
log.Println(err)
40+
}
41+
addr = string(res) + ":80"
42+
}
43+
44+
return dialer.DialContext(ctx, network, addr)
45+
}
1946
proxy := httputil.NewSingleHostReverseProxy(remote)
2047
r.Host = remote.Host
2148
proxy.ServeHTTP(w, r)
22-
log.Println(r.RemoteAddr + " " + r.Method + " " + r.URL.String() + " " + r.Proto + " " + r.UserAgent())
2349
}

main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func StartServer(bind string, remote string) {
1515
h := &handle{reverseProxy: remote}
1616
srv.Addr = bind
1717
srv.Handler = h
18+
1819
go func() {
1920
if err := srv.ListenAndServe(); err != nil {
2021
log.Fatalln("ListenAndServe: ", err)
@@ -33,7 +34,7 @@ func main() {
3334
StartServer(cmd.bind, cmd.remote)
3435
reader := bufio.NewReader(os.Stdin)
3536
for {
36-
str , err := reader.ReadString('\n')
37+
str, err := reader.ReadString('\n')
3738
if err != nil {
3839
log.Println(err)
3940
}

0 commit comments

Comments
 (0)