pretty logs
This commit is contained in:
parent
ec8cfa44a0
commit
f2de67f8c1
28
README.md
28
README.md
@ -44,20 +44,18 @@ protocol: 代理协议类型(http, socks5, shadowsocks), transport: 数据传输
|
|||||||
|
|
||||||
> ss - 作为shadowsocks服务,ss://aes-256-cfb:123456@:8080
|
> ss - 作为shadowsocks服务,ss://aes-256-cfb:123456@:8080
|
||||||
|
|
||||||
#### 本地端口转发
|
#### 端口转发
|
||||||
|
|
||||||
适用于-L参数
|
适用于-L参数
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
scheme://[bind_address]:port/[host]:hostport
|
scheme://[bind_address]:port/[host]:hostport
|
||||||
```
|
```
|
||||||
> scheme - 端口转发类型: tcp, udp
|
> scheme - 端口转发模式, 本地端口转发: tcp, udp; 远程端口转发: rtcp, rudp
|
||||||
|
|
||||||
> bind_address:port - 本地监听地址
|
> bind_address:port - 本地/远程绑定地址
|
||||||
|
|
||||||
> host:hostport - 远程地址
|
> host:hostport - 目标访问地址
|
||||||
|
|
||||||
当在bind_address:port上收到连接信息,则会(通过转发链)与host:hostport建立连接,创建一条数据通道。
|
|
||||||
|
|
||||||
#### 开启日志
|
#### 开启日志
|
||||||
|
|
||||||
@ -123,7 +121,23 @@ gost -L=udp://:5353/192.168.1.1:53 -F=...
|
|||||||
```
|
```
|
||||||
将本地UDP端口5353上的数据(通过转发链)转发到192.168.1.1:53上。
|
将本地UDP端口5353上的数据(通过转发链)转发到192.168.1.1:53上。
|
||||||
|
|
||||||
**注: 如果有转发链,则转发链的末端(最后一个-F参数)必须是gost socks5类型代理。**
|
**注: 转发UDP数据时,如果有转发链,则转发链的末端(最后一个-F参数)必须是gost socks5类型代理。**
|
||||||
|
|
||||||
|
#### 远程端口转发(TCP)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gost -L=rtcp://:2222/192.168.1.1:22 -F=... -F=socks://172.24.10.1:1080
|
||||||
|
```
|
||||||
|
将172.24.10.1:2222上的数据(通过转发链)转发到192.168.1.1:22上。
|
||||||
|
|
||||||
|
#### 远程端口转发(UDP
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gost -L=rudp://:5353/192.168.1.1:53 -F=... -F=socks://172.24.10.1:1080
|
||||||
|
```
|
||||||
|
将172.24.10.1:5353上的数据(通过转发链)转发到192.168.1.1:53上。
|
||||||
|
|
||||||
|
**注: 若要使用远程端口转发功能,则至少要设置一个-F参数,且转发链的末端(最后一个-F参数)必须是gost socks5类型代理。**
|
||||||
|
|
||||||
加密机制
|
加密机制
|
||||||
------
|
------
|
||||||
|
32
conn.go
32
conn.go
@ -17,7 +17,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
//"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -76,6 +76,10 @@ func listenAndServe(arg Args) error {
|
|||||||
glog.V(LWARNING).Infoln(err)
|
glog.V(LWARNING).Infoln(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if tc, ok := conn.(*net.TCPConn); ok {
|
||||||
|
tc.SetKeepAlive(true)
|
||||||
|
tc.SetKeepAlivePeriod(time.Second * 180)
|
||||||
|
}
|
||||||
go handleConn(conn, arg)
|
go handleConn(conn, arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,17 +179,19 @@ func serveRUdpForward(arg Args) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func handleConn(conn net.Conn, arg Args) {
|
func handleConn(conn net.Conn, arg Args) {
|
||||||
atomic.AddInt32(&connCounter, 1)
|
/*
|
||||||
glog.V(LDEBUG).Infof("%s connected, connections: %d",
|
atomic.AddInt32(&connCounter, 1)
|
||||||
conn.RemoteAddr(), atomic.LoadInt32(&connCounter))
|
glog.V(LDEBUG).Infof("%s connected, connections: %d",
|
||||||
|
conn.RemoteAddr(), atomic.LoadInt32(&connCounter))
|
||||||
|
|
||||||
if glog.V(LDEBUG) {
|
if glog.V(LDEBUG) {
|
||||||
defer func() {
|
defer func() {
|
||||||
glog.Infof("%s disconnected, connections: %d",
|
glog.Infof("%s disconnected, connections: %d",
|
||||||
conn.RemoteAddr(), atomic.LoadInt32(&connCounter))
|
conn.RemoteAddr(), atomic.LoadInt32(&connCounter))
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
defer atomic.AddInt32(&connCounter, -1)
|
defer atomic.AddInt32(&connCounter, -1)
|
||||||
|
*/
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
// socks5 server supported methods
|
// socks5 server supported methods
|
||||||
@ -329,6 +335,10 @@ func forwardChain(chain ...Args) (conn net.Conn, end Args, err error) {
|
|||||||
if conn, err = net.DialTimeout("tcp", end.Addr, time.Second*90); err != nil {
|
if conn, err = net.DialTimeout("tcp", end.Addr, time.Second*90); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
tc := conn.(*net.TCPConn)
|
||||||
|
tc.SetKeepAlive(true)
|
||||||
|
tc.SetKeepAlivePeriod(time.Second * 180) // 3min
|
||||||
|
|
||||||
c, err := forward(conn, end)
|
c, err := forward(conn, end)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -246,6 +246,7 @@ func connectRUdpForward(conn net.Conn, arg Args) error {
|
|||||||
glog.V(LWARNING).Infof("[rudp] %s -> %s : %s", bindAddr, arg.Remote, err)
|
glog.V(LWARNING).Infof("[rudp] %s -> %s : %s", bindAddr, arg.Remote, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
glog.V(LDEBUG).Infof("[rudp] %s <<< %s length: %d", arg.Remote, bindAddr, len(dgram.Data))
|
||||||
|
|
||||||
relay.SetReadDeadline(time.Now().Add(time.Second * 60))
|
relay.SetReadDeadline(time.Now().Add(time.Second * 60))
|
||||||
n, err := relay.Read(b)
|
n, err := relay.Read(b)
|
||||||
@ -255,6 +256,8 @@ func connectRUdpForward(conn net.Conn, arg Args) error {
|
|||||||
}
|
}
|
||||||
relay.SetReadDeadline(time.Time{})
|
relay.SetReadDeadline(time.Time{})
|
||||||
|
|
||||||
|
glog.V(LDEBUG).Infof("[rudp] %s >>> %s length: %d", arg.Remote, bindAddr, n)
|
||||||
|
|
||||||
conn.SetWriteDeadline(time.Now().Add(time.Second * 90))
|
conn.SetWriteDeadline(time.Now().Add(time.Second * 90))
|
||||||
if err := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(uint16(n), 0, dgram.Header.Addr), b[:n]).Write(conn); err != nil {
|
if err := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(uint16(n), 0, dgram.Header.Addr), b[:n]).Write(conn); err != nil {
|
||||||
glog.V(LWARNING).Infof("[rudp] %s <- %s : %s", bindAddr, arg.Remote, err)
|
glog.V(LWARNING).Infof("[rudp] %s <- %s : %s", bindAddr, arg.Remote, err)
|
||||||
|
6
socks.go
6
socks.go
@ -341,9 +341,13 @@ func socks5TunnelUDP(req *gosocks5.Request, conn net.Conn) error {
|
|||||||
}
|
}
|
||||||
defer uconn.Close()
|
defer uconn.Close()
|
||||||
|
|
||||||
if err := gosocks5.NewReply(gosocks5.Succeeded, ToSocksAddr(uconn.LocalAddr())).Write(conn); err != nil {
|
addr := ToSocksAddr(uconn.LocalAddr())
|
||||||
|
addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String())
|
||||||
|
rep := gosocks5.NewReply(gosocks5.Succeeded, addr)
|
||||||
|
if err := rep.Write(conn); err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
glog.V(LDEBUG).Infof("[socks5-udp] %s <- %s\n%s", conn.RemoteAddr(), uconn.LocalAddr(), rep)
|
||||||
|
|
||||||
glog.V(LINFO).Infof("[socks5-udp] %s <-> %s", conn.RemoteAddr(), uconn.LocalAddr())
|
glog.V(LINFO).Infof("[socks5-udp] %s <-> %s", conn.RemoteAddr(), uconn.LocalAddr())
|
||||||
tunnelUDP(uconn, conn, false)
|
tunnelUDP(uconn, conn, false)
|
||||||
|
14
ss.go
14
ss.go
@ -11,12 +11,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func handleShadow(conn net.Conn, arg Args) {
|
func handleShadow(conn net.Conn, arg Args) {
|
||||||
|
glog.V(LINFO).Infof("[ss] %s -> %s", conn.RemoteAddr(), conn.LocalAddr())
|
||||||
|
|
||||||
if arg.User != nil {
|
if arg.User != nil {
|
||||||
method := arg.User.Username()
|
method := arg.User.Username()
|
||||||
password, _ := arg.User.Password()
|
password, _ := arg.User.Password()
|
||||||
cipher, err := shadowsocks.NewCipher(method, password)
|
cipher, err := shadowsocks.NewCipher(method, password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(LWARNING).Infoln("shadowsocks:", err)
|
glog.V(LWARNING).Infof("[ss] %s - %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
conn = shadowsocks.NewConn(conn, cipher)
|
conn = shadowsocks.NewConn(conn, cipher)
|
||||||
@ -24,26 +26,28 @@ func handleShadow(conn net.Conn, arg Args) {
|
|||||||
|
|
||||||
addr, extra, err := getShadowRequest(conn)
|
addr, extra, err := getShadowRequest(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(LWARNING).Infoln("shadowsocks:", err)
|
glog.V(LWARNING).Infof("[ss] %s - %s : %s", conn.RemoteAddr(), conn.LocalAddr(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
glog.V(LINFO).Infoln("shadowsocks connect:", addr.String())
|
glog.V(LINFO).Infof("[ss] %s -> %s", conn.RemoteAddr(), addr.String())
|
||||||
|
|
||||||
sconn, err := Connect(addr.String())
|
sconn, err := Connect(addr.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(LWARNING).Infoln("shadowsocks:", err)
|
glog.V(LWARNING).Infof("[ss] %s -> %s : %s", conn.RemoteAddr(), addr.String(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer sconn.Close()
|
defer sconn.Close()
|
||||||
|
|
||||||
if extra != nil {
|
if extra != nil {
|
||||||
if _, err := sconn.Write(extra); err != nil {
|
if _, err := sconn.Write(extra); err != nil {
|
||||||
glog.V(LWARNING).Infoln("shadowsocks:", err)
|
glog.V(LWARNING).Infof("[ss] %s - %s : %s", conn.RemoteAddr(), addr.String(), err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glog.V(LINFO).Infof("[ss] %s <-> %s", conn.RemoteAddr(), addr.String())
|
||||||
Transport(conn, sconn)
|
Transport(conn, sconn)
|
||||||
|
glog.V(LINFO).Infof("[ss] %s >-< %s", conn.RemoteAddr(), addr.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func getShadowRequest(conn net.Conn) (addr *gosocks5.Addr, extra []byte, err error) {
|
func getShadowRequest(conn net.Conn) (addr *gosocks5.Addr, extra []byte, err error) {
|
||||||
|
6
ws.go
6
ws.go
@ -112,13 +112,13 @@ func NewWs(arg Args) *ws {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *ws) handle(w http.ResponseWriter, r *http.Request) {
|
func (s *ws) handle(w http.ResponseWriter, r *http.Request) {
|
||||||
glog.V(LINFO).Infoln("[ws] %s - %s", r.RemoteAddr, s.arg.Addr)
|
glog.V(LINFO).Infof("[ws] %s - %s", r.RemoteAddr, s.arg.Addr)
|
||||||
if glog.V(LDEBUG) {
|
if glog.V(LDEBUG) {
|
||||||
dump, err := httputil.DumpRequest(r, false)
|
dump, err := httputil.DumpRequest(r, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(LWARNING).Infoln("[ws] %s - %s : %s", r.RemoteAddr, s.arg.Addr, err)
|
glog.V(LWARNING).Infof("[ws] %s - %s : %s", r.RemoteAddr, s.arg.Addr, err)
|
||||||
} else {
|
} else {
|
||||||
glog.V(LDEBUG).Infoln("[ws] %s - %s\n%s", r.RemoteAddr, s.arg.Addr, string(dump))
|
glog.V(LDEBUG).Infof("[ws] %s - %s\n%s", r.RemoteAddr, s.arg.Addr, string(dump))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn, err := s.upgrader.Upgrade(w, r, nil)
|
conn, err := s.upgrader.Upgrade(w, r, nil)
|
||||||
|
Loading…
Reference in New Issue
Block a user