diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d701402 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test +release +debian + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe +*.test diff --git a/client.go b/client.go index aa72e7c..2213433 100644 --- a/client.go +++ b/client.go @@ -192,7 +192,7 @@ func handleSocks5(conn net.Conn, sconn net.Conn) { addr := ToSocksAddr(uconn.LocalAddr()) addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) - //log.Println("udp:", addr) + log.Println("udp:", addr) rep = gosocks5.NewReply(gosocks5.Succeeded, addr) if err := rep.Write(conn); err != nil { diff --git a/main.go b/main.go index f8d0488..2f454f2 100644 --- a/main.go +++ b/main.go @@ -21,7 +21,7 @@ func init() { flag.StringVar(&Proxy, "P", "", "proxy for forward") flag.StringVar(&Saddr, "S", "", "the server that connecting to") flag.StringVar(&Laddr, "L", ":8080", "listen address") - flag.StringVar(&Method, "m", "tls", "tunnel cipher method") + flag.StringVar(&Method, "m", "", "tunnel cipher method") flag.StringVar(&Password, "p", "ginuerzh@gmail.com", "tunnel cipher password") flag.StringVar(&CertFile, "cert", "", "cert file for tls") flag.StringVar(&KeyFile, "key", "", "key file for tls") diff --git a/release/1.0/.goxc-temp/control.tar.gz b/release/1.0/.goxc-temp/control.tar.gz deleted file mode 100644 index 77c582d..0000000 Binary files a/release/1.0/.goxc-temp/control.tar.gz and /dev/null differ diff --git a/release/1.0/.goxc-temp/data.tar.gz b/release/1.0/.goxc-temp/data.tar.gz deleted file mode 100644 index da1a731..0000000 Binary files a/release/1.0/.goxc-temp/data.tar.gz and /dev/null differ diff --git a/release/1.0/LICENSE b/release/1.0/LICENSE deleted file mode 100644 index 4df246f..0000000 --- a/release/1.0/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 郑锐 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/release/1.0/README.md b/release/1.0/README.md deleted file mode 100644 index 0021139..0000000 --- a/release/1.0/README.md +++ /dev/null @@ -1,62 +0,0 @@ -gost - GO Simple Tunnel -==== - -###GO语言实现的安全隧道 - -####目的 -目前这种软件已经很多了,像shadowsocks, goagent等等都很成熟了,那为什么我要再发明一个轮子? -一般公司的上网都是通过公司代理服务器,而且大部分都会有或多或少的限制,比如只能访问特定的端口(80, 443, 8080), -只允许http协议等。 -我一开始在网上找了好多类似功能的软件,但都有一个问题:无法设置上层代理,这样就无法通过公司网络。 -最后找了半天也没找到,于是就自己写了一个,主要是在公司使用。 - -增加shadowsocks服务器模式,是方便我的手机使用,这样我的手机就可以使用shadowsocks客户端连接到本地的shadowsocks服务器,几乎所有软件都可以使用了。 - -#####注:前提条件是要有一台可访问的具有公网IP的主机。 - - -####特性 -1. 支持设置上层http代理。 -2. 客户端可用作http(s), socks5代理。 -3. 服务器端兼容标准的socks5协议, 可直接用作socks5代理, 并额外增加协商加密功能。 -4. Tunnel UDP over TCP, UDP数据包使用TCP通道传输,以解决防火墙的限制。 -5. 多种加密方式(tls,aes-256-cfb,des-cfb,rc4-md5等)。 -6. 客户端兼容shadowsocks协议,可作为shadowsocks服务器。 - -####参数说明 -> -L=":8080": listen address - -> -P="": proxy for forward - -> -S="": the server that connecting to - -> -cert="cert.pem": cert.pem file for tls - -> -key="key.pem": key.pem file for tls - -> -m="tls": tunnel cipher method - -> -p="ginuerzh@gmail.com": tunnel cipher password - -> -sm="rc4-md5": shadowsocks cipher method - -> -sp="ginuerzh@gmail.com": shadowsocks cipher password - -> -ss=false: run as shadowsocks server - - -####使用方法 -#####服务器端: -`$ gost -L=:443` - -#####服务器端有上层http代理: -`$ gost -L=:443 -P=proxy_ip:port` - -#####客户端(默认使用tls加密方法): -`$ gost -L=:8080 -S=your_server_ip:443` - -#####客户端有上层http代理: -`$ gost -L=:8080 -S=your_server_ip:443 -P=proxy_ip:port` - -#####作为shadowsocks服务器(默认使用rc4-md5加密,密码:ginuerzh@gmail.com): -`$ gost -L=:8080 -S=your_server_ip:443 -ss` diff --git a/release/1.0/downloads.md b/release/1.0/downloads.md deleted file mode 100644 index 4cf95ce..0000000 --- a/release/1.0/downloads.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: default -title: Downloads ---- - -gost downloads (version 1.0) - -### Darwin (Apple Mac) - - * [gost\_1.0\_darwin\_386.zip](gost_1.0_darwin_386.zip) - * [gost\_1.0\_darwin\_amd64.zip](gost_1.0_darwin_amd64.zip) - -### Linux - - * [gost\_1.0\_amd64.deb](gost_1.0_amd64.deb) - * [gost\_1.0\_i386.deb](gost_1.0_i386.deb) - * [gost\_1.0\_linux\_386.tar.gz](gost_1.0_linux_386.tar.gz) - * [gost\_1.0\_linux\_amd64.tar.gz](gost_1.0_linux_amd64.tar.gz) - -### MS Windows - - * [gost\_1.0\_windows\_386.zip](gost_1.0_windows_386.zip) - * [gost\_1.0\_windows\_amd64.zip](gost_1.0_windows_amd64.zip) - -### Other files - - * [control.tar.gz](.goxc-temp/control.tar.gz) - * [data.tar.gz](.goxc-temp/data.tar.gz) - * [LICENSE](LICENSE) - * [README.md](README.md) - - - -Generated by goxc \ No newline at end of file diff --git a/release/1.0/gost_1.0_amd64.deb b/release/1.0/gost_1.0_amd64.deb deleted file mode 100644 index 82ae8cd..0000000 Binary files a/release/1.0/gost_1.0_amd64.deb and /dev/null differ diff --git a/release/1.0/gost_1.0_darwin_386.zip b/release/1.0/gost_1.0_darwin_386.zip deleted file mode 100644 index 371c708..0000000 Binary files a/release/1.0/gost_1.0_darwin_386.zip and /dev/null differ diff --git a/release/1.0/gost_1.0_darwin_amd64.zip b/release/1.0/gost_1.0_darwin_amd64.zip deleted file mode 100644 index 9d97311..0000000 Binary files a/release/1.0/gost_1.0_darwin_amd64.zip and /dev/null differ diff --git a/release/1.0/gost_1.0_i386.deb b/release/1.0/gost_1.0_i386.deb deleted file mode 100644 index 64eb4c0..0000000 Binary files a/release/1.0/gost_1.0_i386.deb and /dev/null differ diff --git a/release/1.0/gost_1.0_linux_386.tar.gz b/release/1.0/gost_1.0_linux_386.tar.gz deleted file mode 100644 index 44c3492..0000000 Binary files a/release/1.0/gost_1.0_linux_386.tar.gz and /dev/null differ diff --git a/release/1.0/gost_1.0_linux_amd64.tar.gz b/release/1.0/gost_1.0_linux_amd64.tar.gz deleted file mode 100644 index f928abe..0000000 Binary files a/release/1.0/gost_1.0_linux_amd64.tar.gz and /dev/null differ diff --git a/release/1.0/gost_1.0_windows_386.zip b/release/1.0/gost_1.0_windows_386.zip deleted file mode 100644 index 35b3a03..0000000 Binary files a/release/1.0/gost_1.0_windows_386.zip and /dev/null differ diff --git a/release/1.0/gost_1.0_windows_amd64.zip b/release/1.0/gost_1.0_windows_amd64.zip deleted file mode 100644 index 4871c47..0000000 Binary files a/release/1.0/gost_1.0_windows_amd64.zip and /dev/null differ diff --git a/socks5.go b/socks5.go index 01698ea..b4e5812 100644 --- a/socks5.go +++ b/socks5.go @@ -60,7 +60,7 @@ nh/BAoGBAMY5z2f1pmMhrvtPDSlEVjgjELbaInxFaxPLR4Pdyzn83gtIIU14+R8X var ( serverConfig = &gosocks5.Config{ - SelectMethod: serverSelectMethod, + SelectMethod: serverSelectMethod, MethodSelected: serverMethodSelected, } ) @@ -69,7 +69,6 @@ type Socks5Server struct { Addr string // TCP address to listen on } - func (s *Socks5Server) ListenAndServe() error { addr, err := net.ResolveTCPAddr("tcp", s.Addr) if err != nil { @@ -89,12 +88,11 @@ func (s *Socks5Server) ListenAndServe() error { continue } //log.Println("accept", conn.RemoteAddr()) - + go socks5Handle(gosocks5.ServerConn(conn, serverConfig)) } } - func serverSelectMethod(methods ...uint8) uint8 { for _, method := range methods { if _, ok := Methods[method]; ok { @@ -109,13 +107,13 @@ func serverMethodSelected(method uint8, conn net.Conn) (net.Conn, error) { case MethodTLS: var cert tls.Certificate var err error - + if len(CertFile) == 0 || len(KeyFile) == 0 { cert, err = tls.X509KeyPair([]byte(rawCert), []byte(rawKey)) } else { cert, err = tls.LoadX509KeyPair(CertFile, KeyFile) } - + if err != nil { log.Println(err) return nil, err @@ -137,7 +135,7 @@ func serverMethodSelected(method uint8, conn net.Conn) (net.Conn, error) { func socks5Handle(conn net.Conn) { defer conn.Close() - + req, err := gosocks5.ReadRequest(conn) if err != nil { log.Println(err) @@ -160,7 +158,7 @@ func socks5Handle(conn net.Conn) { } if err := Transport(conn, tconn); err != nil { - log.Println(err) + //log.Println(err) } case gosocks5.CmdBind: l, err := net.ListenTCP("tcp", nil) @@ -171,7 +169,7 @@ func socks5Handle(conn net.Conn) { addr := ToSocksAddr(l.Addr()) addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) - //log.Println("bind:", addr) + log.Println("bind:", addr) rep := gosocks5.NewReply(gosocks5.Succeeded, addr) if err := rep.Write(conn); err != nil { return @@ -195,7 +193,7 @@ func socks5Handle(conn net.Conn) { } if err := Transport(conn, tconn); err != nil { - log.Println(err) + //log.Println(err) } case gosocks5.CmdUdp: uconn, err := net.ListenUDP("udp", nil) @@ -208,7 +206,7 @@ func socks5Handle(conn net.Conn) { addr := ToSocksAddr(uconn.LocalAddr()) addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) - //log.Println("udp:", addr) + log.Println("udp:", addr) rep := gosocks5.NewReply(gosocks5.Succeeded, addr) if err := rep.Write(conn); err != nil { log.Println(err) diff --git a/ws.go b/ws.go index ffe1267..2ade195 100644 --- a/ws.go +++ b/ws.go @@ -23,14 +23,14 @@ func (conn *WSConn) Read(b []byte) (n int, err error) { _, p, err := conn.ReadMessage() copy(b, p) n = len(p) - log.Println("ws r:", n) + //log.Println("ws r:", n) return } func (conn *WSConn) Write(b []byte) (n int, err error) { err = conn.WriteMessage(websocket.BinaryMessage, b) n = len(b) - log.Println("ws w:", n) + //log.Println("ws w:", n) return }