detail log

This commit is contained in:
rui.zheng 2015-10-30 13:11:38 +08:00
parent 01040ca1ff
commit 1012043aaa
2 changed files with 31 additions and 21 deletions

View File

@ -18,6 +18,7 @@ func handleHttpRequest(req *http.Request, conn net.Conn, arg Args) {
glog.Infoln(string(dump)) glog.Infoln(string(dump))
} }
} }
glog.V(LINFO).Infoln("[http] CONNECT", req.Host)
var username, password string var username, password string
if arg.User != nil { if arg.User != nil {
@ -44,7 +45,7 @@ func handleHttpRequest(req *http.Request, conn net.Conn, arg Args) {
c, err := Connect(req.Host) c, err := Connect(req.Host)
if err != nil { if err != nil {
glog.V(LWARNING).Infoln(err) glog.V(LWARNING).Infoln("[http] CONNECT", req.Host, err)
b := []byte("HTTP/1.1 503 Service unavailable\r\n" + b := []byte("HTTP/1.1 503 Service unavailable\r\n" +
"Proxy-Agent: gost/" + Version + "\r\n\r\n") "Proxy-Agent: gost/" + Version + "\r\n\r\n")
@ -74,6 +75,8 @@ func handleHttpRequest(req *http.Request, conn net.Conn, arg Args) {
return return
} }
} }
glog.V(LINFO).Infoln("[http] CONNECT", req.Host, "OK")
Transport(conn, c) Transport(conn, c)
} }

View File

@ -159,11 +159,11 @@ func handleSocks5Request(req *gosocks5.Request, conn net.Conn) {
switch req.Cmd { switch req.Cmd {
case gosocks5.CmdConnect: case gosocks5.CmdConnect:
glog.V(LINFO).Infoln(">>> socks5 connect:", req.Addr.String()) glog.V(LINFO).Infoln("[socks5] CONNECT", req.Addr)
tconn, err := Connect(req.Addr.String()) tconn, err := Connect(req.Addr.String())
if err != nil { if err != nil {
glog.V(LWARNING).Infoln("socks5 connect:", err) glog.V(LWARNING).Infoln("[socks5] CONNECT", req.Addr, err)
rep := gosocks5.NewReply(gosocks5.HostUnreachable, nil) rep := gosocks5.NewReply(gosocks5.HostUnreachable, nil)
if err := rep.Write(conn); err != nil { if err := rep.Write(conn); err != nil {
glog.V(LWARNING).Infoln("socks5 connect:", err) glog.V(LWARNING).Infoln("socks5 connect:", err)
@ -181,9 +181,10 @@ func handleSocks5Request(req *gosocks5.Request, conn net.Conn) {
} }
glog.V(LDEBUG).Infoln(rep) glog.V(LDEBUG).Infoln(rep)
glog.V(LINFO).Infoln("[socks5] CONNECT", req.Addr, "OK")
Transport(conn, tconn) Transport(conn, tconn)
case gosocks5.CmdBind: case gosocks5.CmdBind:
glog.V(LINFO).Infoln(">>> socks5 bind:", req.Addr) glog.V(LINFO).Infoln("[socks5] BIND", req.Addr)
if len(forwardArgs) > 0 { if len(forwardArgs) > 0 {
forwardBind(req, conn) forwardBind(req, conn)
@ -191,7 +192,7 @@ func handleSocks5Request(req *gosocks5.Request, conn net.Conn) {
serveBind(conn) serveBind(conn)
} }
case gosocks5.CmdUdp: case gosocks5.CmdUdp:
glog.V(LINFO).Infoln(">>> socks5 udp associate:", req.Addr) glog.V(LINFO).Infoln("[socks5] UDP ASSOCIATE", req.Addr)
uconn, err := net.ListenUDP("udp", nil) uconn, err := net.ListenUDP("udp", nil)
if err != nil { if err != nil {
glog.V(LWARNING).Infoln("socks5 udp listen:", err) glog.V(LWARNING).Infoln("socks5 udp listen:", err)
@ -208,7 +209,7 @@ func handleSocks5Request(req *gosocks5.Request, conn net.Conn) {
addr := ToSocksAddr(uconn.LocalAddr()) addr := ToSocksAddr(uconn.LocalAddr())
addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String())
glog.V(LINFO).Infoln("socks5 udp listen:", addr) glog.V(LINFO).Infoln("[socks5] UDP listen on", addr)
rep := gosocks5.NewReply(gosocks5.Succeeded, addr) rep := gosocks5.NewReply(gosocks5.Succeeded, addr)
if err := rep.Write(conn); err != nil { if err := rep.Write(conn); err != nil {
@ -223,7 +224,7 @@ func handleSocks5Request(req *gosocks5.Request, conn net.Conn) {
glog.V(LWARNING).Infoln("socks5 udp:", err) glog.V(LWARNING).Infoln("socks5 udp:", err)
return return
} }
glog.V(LDEBUG).Infof("[udp] to %s, length %d", dgram.Header.Addr, len(dgram.Data)) glog.V(LINFO).Infof("[udp] to %s, length %d", dgram.Header.Addr, len(dgram.Data))
raddr, err := net.ResolveUDPAddr("udp", dgram.Header.Addr.String()) raddr, err := net.ResolveUDPAddr("udp", dgram.Header.Addr.String())
if err != nil { if err != nil {
@ -245,7 +246,7 @@ func handleSocks5Request(req *gosocks5.Request, conn net.Conn) {
glog.V(LWARNING).Infoln("socks5 udp:", err) glog.V(LWARNING).Infoln("socks5 udp:", err)
return return
} }
glog.V(LDEBUG).Infof("[udp] from %s, length %d", dgram.Header.Addr, len(dgram.Data)) glog.V(LINFO).Infof("[udp] from %s, length %d", dgram.Header.Addr, len(dgram.Data))
if err = cc.WriteUDPTimeout(dgram, time.Second*30); err != nil { if err = cc.WriteUDPTimeout(dgram, time.Second*30); err != nil {
glog.V(LWARNING).Infoln("socks5 udp:", err) glog.V(LWARNING).Infoln("socks5 udp:", err)
@ -275,7 +276,6 @@ func serveBind(conn net.Conn) error {
addr := ToSocksAddr(l.Addr()) addr := ToSocksAddr(l.Addr())
// Issue: may not reachable when host has two interfaces // Issue: may not reachable when host has two interfaces
addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String()) addr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String())
glog.V(LINFO).Infoln("socks5 bind:", addr)
rep := gosocks5.NewReply(gosocks5.Succeeded, addr) rep := gosocks5.NewReply(gosocks5.Succeeded, addr)
if err := rep.Write(conn); err != nil { if err := rep.Write(conn); err != nil {
@ -284,6 +284,7 @@ func serveBind(conn net.Conn) error {
return err return err
} }
glog.V(LDEBUG).Infoln(rep) glog.V(LDEBUG).Infoln(rep)
glog.V(LINFO).Infoln("[socks5] BIND on", addr, "OK")
tconn, err := l.AcceptTCP() tconn, err := l.AcceptTCP()
l.Close() // only accept one peer l.Close() // only accept one peer
@ -301,7 +302,7 @@ func serveBind(conn net.Conn) error {
defer tconn.Close() defer tconn.Close()
addr = ToSocksAddr(tconn.RemoteAddr()) addr = ToSocksAddr(tconn.RemoteAddr())
glog.V(LINFO).Infoln("socks5 bind accept:", addr.String()) glog.V(LINFO).Infoln("[socks5] BIND accept", addr)
rep = gosocks5.NewReply(gosocks5.Succeeded, addr) rep = gosocks5.NewReply(gosocks5.Succeeded, addr)
if err := rep.Write(conn); err != nil { if err := rep.Write(conn); err != nil {
@ -316,6 +317,7 @@ func serveBind(conn net.Conn) error {
func forwardBind(req *gosocks5.Request, conn net.Conn) error { func forwardBind(req *gosocks5.Request, conn net.Conn) error {
fconn, _, err := forwardChain(forwardArgs...) fconn, _, err := forwardChain(forwardArgs...)
if err != nil { if err != nil {
glog.V(LWARNING).Infoln("[socks5] BIND(forward)", req.Addr, err)
if fconn != nil { if fconn != nil {
fconn.Close() fconn.Close()
} }
@ -330,42 +332,47 @@ func forwardBind(req *gosocks5.Request, conn net.Conn) error {
defer fconn.Close() defer fconn.Close()
if err := req.Write(fconn); err != nil { if err := req.Write(fconn); err != nil {
glog.V(LWARNING).Infoln("socks5 bind forward:", err) glog.V(LWARNING).Infoln("[socks5] BIND(forward)", err)
gosocks5.NewReply(gosocks5.Failure, nil).Write(conn) gosocks5.NewReply(gosocks5.Failure, nil).Write(conn)
return err return err
} }
glog.V(LDEBUG).Infoln(req) glog.V(LDEBUG).Infoln(req)
// first reply // first reply
if err := peekReply(conn, fconn); err != nil { rep, err := peekReply(conn, fconn)
glog.V(LWARNING).Infoln("socks5 bind forward:", err) if err != nil {
glog.V(LWARNING).Infoln("[socks5] BIND(forward)", err)
return err return err
} }
glog.V(LINFO).Infoln("[socks5] BIND(forward) on", rep.Addr, "OK")
// second reply // second reply
if err := peekReply(conn, fconn); err != nil { rep, err = peekReply(conn, fconn)
glog.V(LWARNING).Infoln("socks5 bind forward:", err) if err != nil {
glog.V(LWARNING).Infoln("[socks5] BIND(forward) accept", err)
return err return err
} }
glog.V(LINFO).Infoln("[socks5] BIND(forward) accept", rep.Addr)
return Transport(conn, fconn) return Transport(conn, fconn)
} }
func peekReply(dst io.Writer, src io.Reader) error { func peekReply(dst io.Writer, src io.Reader) (rep *gosocks5.Reply, err error) {
rep, err := gosocks5.ReadReply(src) rep, err = gosocks5.ReadReply(src)
if err != nil { if err != nil {
glog.V(LWARNING).Infoln(err) glog.V(LWARNING).Infoln(err)
rep = gosocks5.NewReply(gosocks5.Failure, nil) rep = gosocks5.NewReply(gosocks5.Failure, nil)
} }
if err := rep.Write(dst); err != nil { if err = rep.Write(dst); err != nil {
return err return
} }
glog.V(LDEBUG).Infoln(rep) glog.V(LDEBUG).Infoln(rep)
if rep.Rep != gosocks5.Succeeded { if rep.Rep != gosocks5.Succeeded {
return errors.New("Failure") err = errors.New("Failure")
} }
return nil return
} }
func createClientConn(conn net.Conn, uconn *net.UDPConn) (c *UDPConn, dgram *gosocks5.UDPDatagram, err error) { func createClientConn(conn net.Conn, uconn *net.UDPConn) (c *UDPConn, dgram *gosocks5.UDPDatagram, err error) {