|
|
@ -11,10 +11,10 @@ import ( |
|
|
"github.com/shadowsocks/shadowsocks-go/shadowsocks" |
|
|
"github.com/shadowsocks/shadowsocks-go/shadowsocks" |
|
|
"io" |
|
|
"io" |
|
|
"io/ioutil" |
|
|
"io/ioutil" |
|
|
"net/url" |
|
|
|
|
|
"log" |
|
|
"log" |
|
|
"net" |
|
|
"net" |
|
|
"net/http" |
|
|
"net/http" |
|
|
|
|
|
"net/url" |
|
|
"strconv" |
|
|
"strconv" |
|
|
"strings" |
|
|
"strings" |
|
|
//"sync/atomic"
|
|
|
//"sync/atomic"
|
|
|
@ -65,8 +65,6 @@ func clientMethodSelected(method uint8, conn net.Conn) (net.Conn, error) { |
|
|
cipher, _ := shadowsocks.NewCipher(Methods[method], Password) |
|
|
cipher, _ := shadowsocks.NewCipher(Methods[method], Password) |
|
|
conn = shadowsocks.NewConn(conn, cipher) |
|
|
conn = shadowsocks.NewConn(conn, cipher) |
|
|
case gosocks5.MethodNoAcceptable: |
|
|
case gosocks5.MethodNoAcceptable: |
|
|
fallthrough |
|
|
|
|
|
default: |
|
|
|
|
|
return nil, gosocks5.ErrBadMethod |
|
|
return nil, gosocks5.ErrBadMethod |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -81,31 +79,9 @@ func cliHandle(conn net.Conn) { |
|
|
fmt.Println("session end", atomic.AddInt64(&sessionCount, -1)) |
|
|
fmt.Println("session end", atomic.AddInt64(&sessionCount, -1)) |
|
|
}() |
|
|
}() |
|
|
*/ |
|
|
*/ |
|
|
addr := Saddr |
|
|
|
|
|
if strings.HasPrefix(addr, "http://") { |
|
|
//log.Println("connect:", Saddr)
|
|
|
u, err := url.Parse(addr) |
|
|
c, err := Connect(Saddr, Proxy) |
|
|
if err != nil { |
|
|
|
|
|
log.Println(err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
addr = u.Host |
|
|
|
|
|
if !strings.Contains(addr, ":") { |
|
|
|
|
|
addr += ":80" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if strings.HasPrefix(addr, "https://") { |
|
|
|
|
|
u, err := url.Parse(addr) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Println(err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
addr = u.Host |
|
|
|
|
|
if !strings.Contains(addr, ":") { |
|
|
|
|
|
addr += ":443" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
log.Println("connect:", addr) |
|
|
|
|
|
c, err := Connect(addr, Proxy) |
|
|
|
|
|
if err != nil { |
|
|
if err != nil { |
|
|
log.Println(err) |
|
|
log.Println(err) |
|
|
return |
|
|
return |
|
|
@ -113,12 +89,10 @@ func cliHandle(conn net.Conn) { |
|
|
defer c.Close() |
|
|
defer c.Close() |
|
|
|
|
|
|
|
|
if Websocket { |
|
|
if Websocket { |
|
|
u, err := url.Parse(addr) |
|
|
url := &url.URL{ |
|
|
if err != nil { |
|
|
Host: Saddr, |
|
|
log.Println(err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
} |
|
|
ws, resp, err := websocket.NewClient(c, u, nil, 8192, 8192) |
|
|
ws, resp, err := websocket.NewClient(c, url, nil, 8192, 8192) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
log.Println(err) |
|
|
log.Println(err) |
|
|
return |
|
|
return |
|
|
@ -128,7 +102,12 @@ func cliHandle(conn net.Conn) { |
|
|
c = NewWSConn(ws) |
|
|
c = NewWSConn(ws) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
c = gosocks5.ClientConn(c, clientConfig) |
|
|
sc := gosocks5.ClientConn(c, clientConfig) |
|
|
|
|
|
if err := sc.Handleshake(); err != nil { |
|
|
|
|
|
log.Println(err) |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
c = sc |
|
|
|
|
|
|
|
|
if Shadows { |
|
|
if Shadows { |
|
|
cipher, _ := shadowsocks.NewCipher(SMethod, SPassword) |
|
|
cipher, _ := shadowsocks.NewCipher(SMethod, SPassword) |
|
|
@ -186,7 +165,7 @@ func handleSocks5(conn net.Conn, sconn net.Conn) { |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
//log.Println(req)
|
|
|
log.Println(req) |
|
|
|
|
|
|
|
|
switch req.Cmd { |
|
|
switch req.Cmd { |
|
|
case gosocks5.CmdConnect, gosocks5.CmdBind: |
|
|
case gosocks5.CmdConnect, gosocks5.CmdBind: |
|
|
|