using logrus log

This commit is contained in:
p_caiwfeng
2021-10-03 11:00:50 +08:00
parent dce6b1d4c0
commit d787b6c243
16 changed files with 143 additions and 152 deletions

View File

@@ -1,24 +0,0 @@
package core
import (
"fmt"
"log"
)
func init() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
}
// LogLogger uses the standard log package as the logger
type LogLogger struct {
}
// Log uses the standard log library log.Output
func (l *LogLogger) Log(v ...interface{}) {
log.Output(3, fmt.Sprintln(v...))
}
// Logf uses the standard log library log.Output
func (l *LogLogger) Logf(format string, v ...interface{}) {
log.Output(3, fmt.Sprintf(format, v...))
}

View File

@@ -8,7 +8,7 @@ import (
"net"
"time"
"github.com/go-log/log"
log "github.com/sirupsen/logrus"
)
// Server is a proxy server.
@@ -55,7 +55,7 @@ func (s *Server) Serve(ctx context.Context, h Handler) error {
if max := 1 * time.Second; tempDelay > max {
tempDelay = max
}
log.Logf("server: Accept error: %v; retrying in %v", e, tempDelay)
log.Warnf("server: Accept error: %v; retrying in %v", e, tempDelay)
time.Sleep(tempDelay)
continue
}

View File

@@ -12,7 +12,7 @@ import (
"time"
"github.com/ginuerzh/gosocks5"
"github.com/go-log/log"
log "github.com/sirupsen/logrus"
)
type clientSelector struct {
@@ -22,7 +22,7 @@ type clientSelector struct {
func (selector *clientSelector) Methods() []uint8 {
if util.Debug {
log.Log("[socks5] methods:", selector.methods)
log.Debug("[socks5] methods:", selector.methods)
}
return selector.methods
}
@@ -37,7 +37,7 @@ func (selector *clientSelector) Select(methods ...uint8) (method uint8) {
func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) {
if util.Debug {
log.Log("[socks5] method selected:", method)
log.Debug("[socks5] method selected:", method)
}
switch method {
case gosocks5.MethodUserPass:
@@ -49,19 +49,19 @@ func (selector *clientSelector) OnSelected(method uint8, conn net.Conn) (net.Con
req := gosocks5.NewUserPassRequest(gosocks5.UserPassVer, username, password)
if err := req.Write(conn); err != nil {
log.Log("[socks5]", err)
log.Debug("[socks5]", err)
return nil, err
}
if util.Debug {
log.Log("[socks5]", req)
log.Debug("[socks5]", req)
}
resp, err := gosocks5.ReadUserPassResponse(conn)
if err != nil {
log.Log("[socks5]", err)
log.Debug("[socks5]", err)
return nil, err
}
if util.Debug {
log.Log("[socks5]", resp)
log.Debug("[socks5]", resp)
}
if resp.Status != gosocks5.Succeeded {
return nil, gosocks5.ErrAuthFailure
@@ -89,7 +89,7 @@ func (selector *serverSelector) AddMethod(methods ...uint8) {
func (selector *serverSelector) Select(methods ...uint8) (method uint8) {
if util.Debug {
log.Logf("[socks5] %d %d %v", gosocks5.Ver5, len(methods), methods)
log.Debugf("[socks5] %d %d %v", gosocks5.Ver5, len(methods), methods)
}
method = gosocks5.MethodNoAuth
// when Authenticator is set, auth is mandatory
@@ -104,39 +104,39 @@ func (selector *serverSelector) Select(methods ...uint8) (method uint8) {
func (selector *serverSelector) OnSelected(method uint8, conn net.Conn) (net.Conn, error) {
if util.Debug {
log.Logf("[socks5] %d %d", gosocks5.Ver5, method)
log.Debugf("[socks5] %d %d", gosocks5.Ver5, method)
}
switch method {
case gosocks5.MethodUserPass:
req, err := gosocks5.ReadUserPassRequest(conn)
if err != nil {
log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err)
log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err)
return nil, err
}
if util.Debug {
log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), req.String())
log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), req.String())
}
if selector.Authenticator != nil && !selector.Authenticator.Authenticate(req.Username, req.Password) {
resp := gosocks5.NewUserPassResponse(gosocks5.UserPassVer, gosocks5.Failure)
if err := resp.Write(conn); err != nil {
log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err)
log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err)
return nil, err
}
if util.Debug {
log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp)
log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp)
}
log.Logf("[socks5] %s - %s: proxy authentication required", conn.RemoteAddr(), conn.LocalAddr())
log.Debugf("[socks5] %s - %s: proxy authentication required", conn.RemoteAddr(), conn.LocalAddr())
return nil, gosocks5.ErrAuthFailure
}
resp := gosocks5.NewUserPassResponse(gosocks5.UserPassVer, gosocks5.Succeeded)
if err := resp.Write(conn); err != nil {
log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err)
log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), err)
return nil, err
}
if util.Debug {
log.Logf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp)
log.Debugf("[socks5] %s - %s: %s", conn.RemoteAddr(), conn.LocalAddr(), resp)
}
case gosocks5.MethodNoAcceptable:
return nil, gosocks5.ErrBadMethod
@@ -192,7 +192,7 @@ func (c *socks5Connector) ConnectContext(ctx context.Context, conn net.Conn, net
}
if util.Debug {
log.Log("[socks5]", req)
log.Debug("[socks5]", req)
}
reply, err := gosocks5.ReadReply(conn)
@@ -201,7 +201,7 @@ func (c *socks5Connector) ConnectContext(ctx context.Context, conn net.Conn, net
}
if util.Debug {
log.Log("[socks5]", reply)
log.Debug("[socks5]", reply)
}
if reply.Rep != gosocks5.Succeeded {
@@ -272,13 +272,13 @@ func (h *socks5Handler) Handle(conn net.Conn) {
conn = gosocks5.ServerConn(conn, h.selector)
req, err := gosocks5.ReadRequest(conn)
if err != nil {
log.Logf("[socks5] %s -> %s : %s",
log.Debugf("[socks5] %s -> %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
return
}
if util.Debug {
log.Logf("[socks5] %s -> %s\n%s",
log.Debugf("[socks5] %s -> %s\n%s",
conn.RemoteAddr(), conn.LocalAddr(), req)
}
switch req.Cmd {
@@ -292,7 +292,7 @@ func (h *socks5Handler) Handle(conn net.Conn) {
h.handleUDPTunnel(conn, req)
default:
log.Logf("[socks5] %s - %s : Unrecognized request: %d",
log.Debugf("[socks5] %s - %s : Unrecognized request: %d",
conn.RemoteAddr(), conn.LocalAddr(), req.Cmd)
}
}
@@ -300,7 +300,7 @@ func (h *socks5Handler) Handle(conn net.Conn) {
func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) {
host := req.Addr.String()
log.Logf("[socks5] %s -> %s -> %s",
log.Debugf("[socks5] %s -> %s -> %s",
conn.RemoteAddr(), h.options.Node.String(), host)
retries := 1
@@ -314,7 +314,7 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) {
for i := 0; i < retries; i++ {
route, err = h.options.Chain.selectRouteFor(host)
if err != nil {
log.Logf("[socks5] %s -> %s : %s",
log.Debugf("[socks5] %s -> %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
continue
}
@@ -326,13 +326,13 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) {
fmt.Fprintf(&buf, "%s -> ", nd.String())
}
fmt.Fprintf(&buf, "%s", host)
log.Log("[route]", buf.String())
log.Debug("[route]", buf.String())
cc, err = route.DialContext(context.Background(), "tcp", host)
if err == nil {
break
}
log.Logf("[socks5] %s -> %s : %s",
log.Debugf("[socks5] %s -> %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
}
@@ -340,7 +340,7 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) {
rep := gosocks5.NewReply(gosocks5.HostUnreachable, nil)
rep.Write(conn)
if util.Debug {
log.Logf("[socks5] %s <- %s\n%s",
log.Debugf("[socks5] %s <- %s\n%s",
conn.RemoteAddr(), conn.LocalAddr(), rep)
}
return
@@ -349,23 +349,23 @@ func (h *socks5Handler) handleConnect(conn net.Conn, req *gosocks5.Request) {
rep := gosocks5.NewReply(gosocks5.Succeeded, nil)
if err := rep.Write(conn); err != nil {
log.Logf("[socks5] %s <- %s : %s",
log.Debugf("[socks5] %s <- %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
return
}
if util.Debug {
log.Logf("[socks5] %s <- %s\n%s",
log.Debugf("[socks5] %s <- %s\n%s",
conn.RemoteAddr(), conn.LocalAddr(), rep)
}
log.Logf("[socks5] %s <-> %s", conn.RemoteAddr(), host)
log.Debugf("[socks5] %s <-> %s", conn.RemoteAddr(), host)
transport(conn, cc)
log.Logf("[socks5] %s >-< %s", conn.RemoteAddr(), host)
log.Debugf("[socks5] %s >-< %s", conn.RemoteAddr(), host)
}
func (h *socks5Handler) handleBind(conn net.Conn, req *gosocks5.Request) {
addr := req.Addr.String()
log.Logf("[socks5-bind] %s -> %s -> %s",
log.Debugf("[socks5-bind] %s -> %s -> %s",
conn.RemoteAddr(), h.options.Node.String(), addr)
if h.options.Chain.IsEmpty() {
@@ -375,12 +375,12 @@ func (h *socks5Handler) handleBind(conn net.Conn, req *gosocks5.Request) {
cc, err := h.options.Chain.Conn()
if err != nil {
log.Logf("[socks5-bind] %s <- %s : %s",
log.Debugf("[socks5-bind] %s <- %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
reply := gosocks5.NewReply(gosocks5.Failure, nil)
reply.Write(conn)
if util.Debug {
log.Logf("[socks5-bind] %s <- %s\n%s",
log.Debugf("[socks5-bind] %s <- %s\n%s",
conn.RemoteAddr(), conn.LocalAddr(), reply)
}
return
@@ -391,16 +391,16 @@ func (h *socks5Handler) handleBind(conn net.Conn, req *gosocks5.Request) {
// so we don't need to authenticate it, as it's as explicit as whitelisting
defer cc.Close()
req.Write(cc)
log.Logf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), addr)
log.Debugf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), addr)
transport(conn, cc)
log.Logf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), addr)
log.Debugf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), addr)
}
func (h *socks5Handler) bindOn(conn net.Conn, addr string) {
bindAddr, _ := net.ResolveTCPAddr("tcp", addr)
ln, err := net.ListenTCP("tcp", bindAddr) // strict mode: if the port already in use, it will return error
if err != nil {
log.Logf("[socks5-bind] %s -> %s : %s",
log.Debugf("[socks5-bind] %s -> %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
gosocks5.NewReply(gosocks5.Failure, nil).Write(conn)
return
@@ -411,16 +411,16 @@ func (h *socks5Handler) bindOn(conn net.Conn, addr string) {
socksAddr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String())
reply := gosocks5.NewReply(gosocks5.Succeeded, socksAddr)
if err := reply.Write(conn); err != nil {
log.Logf("[socks5-bind] %s <- %s : %s",
log.Debugf("[socks5-bind] %s <- %s : %s",
conn.RemoteAddr(), conn.LocalAddr(), err)
ln.Close()
return
}
if util.Debug {
log.Logf("[socks5-bind] %s <- %s\n%s",
log.Debugf("[socks5-bind] %s <- %s\n%s",
conn.RemoteAddr(), conn.LocalAddr(), reply)
}
log.Logf("[socks5-bind] %s - %s BIND ON %s OK",
log.Debugf("[socks5-bind] %s - %s BIND ON %s OK",
conn.RemoteAddr(), conn.LocalAddr(), socksAddr)
var pconn net.Conn
@@ -462,29 +462,29 @@ func (h *socks5Handler) bindOn(conn net.Conn, addr string) {
select {
case err := <-accept():
if err != nil || pconn == nil {
log.Logf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err)
log.Debugf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err)
return
}
defer pconn.Close()
reply := gosocks5.NewReply(gosocks5.Succeeded, toSocksAddr(pconn.RemoteAddr()))
if err := reply.Write(pc2); err != nil {
log.Logf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err)
log.Debugf("[socks5-bind] %s <- %s : %v", conn.RemoteAddr(), addr, err)
}
if util.Debug {
log.Logf("[socks5-bind] %s <- %s\n%s", conn.RemoteAddr(), addr, reply)
log.Debugf("[socks5-bind] %s <- %s\n%s", conn.RemoteAddr(), addr, reply)
}
log.Logf("[socks5-bind] %s <- %s PEER %s ACCEPTED", conn.RemoteAddr(), socksAddr, pconn.RemoteAddr())
log.Debugf("[socks5-bind] %s <- %s PEER %s ACCEPTED", conn.RemoteAddr(), socksAddr, pconn.RemoteAddr())
log.Logf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), pconn.RemoteAddr())
log.Debugf("[socks5-bind] %s <-> %s", conn.RemoteAddr(), pconn.RemoteAddr())
if err = transport(pc2, pconn); err != nil {
log.Logf("[socks5-bind] %s - %s : %v", conn.RemoteAddr(), pconn.RemoteAddr(), err)
log.Debugf("[socks5-bind] %s - %s : %v", conn.RemoteAddr(), pconn.RemoteAddr(), err)
}
log.Logf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), pconn.RemoteAddr())
log.Debugf("[socks5-bind] %s >-< %s", conn.RemoteAddr(), pconn.RemoteAddr())
return
case err := <-pipe():
if err != nil {
log.Logf("[socks5-bind] %s -> %s : %v", conn.RemoteAddr(), addr, err)
log.Debugf("[socks5-bind] %s -> %s : %v", conn.RemoteAddr(), addr, err)
}
ln.Close()
return
@@ -525,7 +525,7 @@ func (h *socks5Handler) transportUDP(relay, peer net.PacketConn) (err error) {
return
}
if util.Debug {
log.Logf("[socks5-udp] %s >>> %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data))
log.Debugf("[socks5-udp] %s >>> %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data))
}
}
}()
@@ -551,7 +551,7 @@ func (h *socks5Handler) transportUDP(relay, peer net.PacketConn) (err error) {
return
}
if util.Debug {
log.Logf("[socks5-udp] %s <<< %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data))
log.Debugf("[socks5-udp] %s <<< %s length: %d", relay.LocalAddr(), raddr, len(dgram.Data))
}
}
}()
@@ -576,7 +576,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error
for {
n, addr, err := uc.ReadFromUDP(b)
if err != nil {
log.Logf("[udp-tun] %s <- %s : %s", cc.RemoteAddr(), addr, err)
log.Debugf("[udp-tun] %s <- %s : %s", cc.RemoteAddr(), addr, err)
errc <- err
return
}
@@ -598,7 +598,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error
return
}
if util.Debug {
log.Logf("[udp-tun] %s >>> %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data))
log.Debugf("[udp-tun] %s >>> %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data))
}
}
}()
@@ -607,7 +607,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error
for {
dgram, err := gosocks5.ReadUDPDatagram(cc)
if err != nil {
log.Logf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err)
log.Debugf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err)
errc <- err
return
}
@@ -626,7 +626,7 @@ func (h *socks5Handler) tunnelClientUDP(uc *net.UDPConn, cc net.Conn) (err error
return
}
if util.Debug {
log.Logf("[udp-tun] %s <<< %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data))
log.Debugf("[udp-tun] %s <<< %s length: %d", uc.LocalAddr(), dgram.Header.Addr, len(dgram.Data))
}
}
}()
@@ -646,7 +646,7 @@ func (h *socks5Handler) handleUDPTunnel(conn net.Conn, req *gosocks5.Request) {
bindAddr, _ := net.ResolveUDPAddr("udp", addr)
uc, err := net.ListenUDP("udp", bindAddr)
if err != nil {
log.Logf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err)
log.Debugf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err)
return
}
defer uc.Close()
@@ -655,32 +655,32 @@ func (h *socks5Handler) handleUDPTunnel(conn net.Conn, req *gosocks5.Request) {
socksAddr.Host, _, _ = net.SplitHostPort(conn.LocalAddr().String())
reply := gosocks5.NewReply(gosocks5.Succeeded, socksAddr)
if err := reply.Write(conn); err != nil {
log.Logf("[socks5] udp-tun %s <- %s : %s", conn.RemoteAddr(), socksAddr, err)
log.Debugf("[socks5] udp-tun %s <- %s : %s", conn.RemoteAddr(), socksAddr, err)
return
}
if util.Debug {
log.Logf("[socks5] udp-tun %s <- %s\n%s", conn.RemoteAddr(), socksAddr, reply)
log.Debugf("[socks5] udp-tun %s <- %s\n%s", conn.RemoteAddr(), socksAddr, reply)
}
log.Logf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), socksAddr)
log.Debugf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), socksAddr)
h.tunnelServerUDP(conn, uc)
log.Logf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), socksAddr)
log.Debugf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), socksAddr)
return
}
cc, err := h.options.Chain.Conn()
// connection error
if err != nil {
log.Logf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err)
log.Debugf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err)
reply := gosocks5.NewReply(gosocks5.Failure, nil)
reply.Write(conn)
log.Logf("[socks5] udp-tun %s -> %s\n%s", conn.RemoteAddr(), req.Addr, reply)
log.Debugf("[socks5] udp-tun %s -> %s\n%s", conn.RemoteAddr(), req.Addr, reply)
return
}
defer cc.Close()
cc, err = socks5Handshake(cc, userSocks5HandshakeOption(h.options.Chain.LastNode().User))
if err != nil {
log.Logf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err)
log.Debugf("[socks5] udp-tun %s -> %s : %s", conn.RemoteAddr(), req.Addr, err)
return
}
// tunnel <-> tunnel, direct forwarding
@@ -688,9 +688,9 @@ func (h *socks5Handler) handleUDPTunnel(conn net.Conn, req *gosocks5.Request) {
// so we don't need to authenticate it, as it's as explicit as whitelisting
req.Write(cc)
log.Logf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), cc.RemoteAddr())
log.Debugf("[socks5] udp-tun %s <-> %s", conn.RemoteAddr(), cc.RemoteAddr())
transport(conn, cc)
log.Logf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), cc.RemoteAddr())
log.Debugf("[socks5] udp-tun %s >-< %s", conn.RemoteAddr(), cc.RemoteAddr())
}
func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err error) {
@@ -703,7 +703,7 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err
for {
n, addr, err := pc.ReadFrom(b)
if err != nil {
// log.Logf("[udp-tun] %s : %s", cc.RemoteAddr(), err)
// log.Debugf("[udp-tun] %s : %s", cc.RemoteAddr(), err)
errc <- err
return
}
@@ -712,12 +712,12 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err
dgram := gosocks5.NewUDPDatagram(
gosocks5.NewUDPHeader(uint16(n), 0, toSocksAddr(addr)), b[:n])
if err := dgram.Write(cc); err != nil {
log.Logf("[socks5] udp-tun %s <- %s : %s", cc.RemoteAddr(), dgram.Header.Addr, err)
log.Debugf("[socks5] udp-tun %s <- %s : %s", cc.RemoteAddr(), dgram.Header.Addr, err)
errc <- err
return
}
if util.Debug {
log.Logf("[socks5] udp-tun %s <<< %s length: %d", cc.RemoteAddr(), dgram.Header.Addr, len(dgram.Data))
log.Debugf("[socks5] udp-tun %s <<< %s length: %d", cc.RemoteAddr(), dgram.Header.Addr, len(dgram.Data))
}
}
}()
@@ -726,7 +726,7 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err
for {
dgram, err := gosocks5.ReadUDPDatagram(cc)
if err != nil {
// log.Logf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err)
// log.Debugf("[udp-tun] %s -> 0 : %s", cc.RemoteAddr(), err)
errc <- err
return
}
@@ -737,12 +737,12 @@ func (h *socks5Handler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err err
continue // drop silently
}
if _, err := pc.WriteTo(dgram.Data, addr); err != nil {
log.Logf("[socks5] udp-tun %s -> %s : %s", cc.RemoteAddr(), addr, err)
log.Debugf("[socks5] udp-tun %s -> %s : %s", cc.RemoteAddr(), addr, err)
errc <- err
return
}
if util.Debug {
log.Logf("[socks5] udp-tun %s >>> %s length: %d", cc.RemoteAddr(), addr, len(dgram.Data))
log.Debugf("[socks5] udp-tun %s >>> %s length: %d", cc.RemoteAddr(), addr, len(dgram.Data))
}
}
}()
@@ -829,7 +829,7 @@ func newSocks5UDPTunnelConn(conn net.Conn, raddr, taddr net.Addr, opts ...socks5
return nil, err
}
if util.Debug {
log.Log("[socks5] udp-tun", req)
log.Debug("[socks5] udp-tun", req)
}
reply, err := gosocks5.ReadReply(cc)
@@ -838,7 +838,7 @@ func newSocks5UDPTunnelConn(conn net.Conn, raddr, taddr net.Addr, opts ...socks5
}
if util.Debug {
log.Log("[socks5] udp-tun", reply)
log.Debug("[socks5] udp-tun", reply)
}
if reply.Rep != gosocks5.Succeeded {
@@ -849,7 +849,7 @@ func newSocks5UDPTunnelConn(conn net.Conn, raddr, taddr net.Addr, opts ...socks5
if err != nil {
return nil, err
}
log.Logf("[socks5] udp-tun associate on %s OK", baddr)
log.Debugf("[socks5] udp-tun associate on %s OK", baddr)
return &socks5UDPTunnelConn{
Conn: cc,

View File

@@ -11,9 +11,9 @@ import (
"sync"
"time"
"github.com/go-log/log"
"github.com/shadowsocks/go-shadowsocks2/core"
"github.com/shadowsocks/go-shadowsocks2/shadowaead"
log "github.com/sirupsen/logrus"
"github.com/songgao/water/waterutil"
"golang.org/x/net/ipv4"
"golang.org/x/net/ipv6"
@@ -82,7 +82,7 @@ func (h *tunHandler) Handle(conn net.Conn) {
if addr := h.options.Node.Remote; addr != "" {
raddr, err = net.ResolveUDPAddr("udp", addr)
if err != nil {
log.Logf("[tun] %s: remote addr: %v", conn.LocalAddr(), err)
log.Debugf("[tun] %s: remote addr: %v", conn.LocalAddr(), err)
return
}
}
@@ -102,7 +102,7 @@ func (h *tunHandler) Handle(conn net.Conn) {
pc, ok = cc.(net.PacketConn)
if !ok {
err = errors.New("not a packet connection")
log.Logf("[tun] %s - %s: %s", conn.LocalAddr(), raddr, err)
log.Debugf("[tun] %s - %s: %s", conn.LocalAddr(), raddr, err)
return err
}
} else {
@@ -121,7 +121,7 @@ func (h *tunHandler) Handle(conn net.Conn) {
return h.transportTun(conn, pc, raddr)
}()
if err != nil {
log.Logf("[tun] %s: %v", conn.LocalAddr(), err)
log.Debugf("[tun] %s: %v", conn.LocalAddr(), err)
}
select {
@@ -194,11 +194,11 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
if waterutil.IsIPv4(b[:n]) {
header, err := ipv4.ParseHeader(b[:n])
if err != nil {
log.Logf("[tun] %s: %v", tun.LocalAddr(), err)
log.Debugf("[tun] %s: %v", tun.LocalAddr(), err)
return nil
}
if util.Debug {
log.Logf("[tun] %s -> %s %-4s %d/%-4d %-4x %d",
log.Debugf("[tun] %s -> %s %-4s %d/%-4d %-4x %d",
header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol(b[:n])),
header.Len, header.TotalLen, header.ID, header.Flags)
}
@@ -206,18 +206,18 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
} else if waterutil.IsIPv6(b[:n]) {
header, err := ipv6.ParseHeader(b[:n])
if err != nil {
log.Logf("[tun] %s: %v", tun.LocalAddr(), err)
log.Debugf("[tun] %s: %v", tun.LocalAddr(), err)
return nil
}
if util.Debug {
log.Logf("[tun] %s -> %s %s %d %d",
log.Debugf("[tun] %s -> %s %s %d %d",
header.Src, header.Dst,
ipProtocol(waterutil.IPProtocol(header.NextHeader)),
header.PayloadLen, header.TrafficClass)
}
src, dst = header.Src, header.Dst
} else {
log.Logf("[tun] unknown packet")
log.Debugf("[tun] unknown packet")
return nil
}
@@ -229,12 +229,12 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
addr := h.findRouteFor(dst)
if addr == nil {
log.Logf("[tun] no route for %s -> %s", src, dst)
log.Debugf("[tun] no route for %s -> %s", src, dst)
return nil
}
if util.Debug {
log.Logf("[tun] find route: %s -> %s", dst, addr)
log.Debugf("[tun] find route: %s -> %s", dst, addr)
}
if _, err := conn.WriteTo(b[:n], addr); err != nil {
return err
@@ -265,11 +265,11 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
if waterutil.IsIPv4(b[:n]) {
header, err := ipv4.ParseHeader(b[:n])
if err != nil {
log.Logf("[tun] %s: %v", tun.LocalAddr(), err)
log.Debugf("[tun] %s: %v", tun.LocalAddr(), err)
return nil
}
if util.Debug {
log.Logf("[tun] %s -> %s %-4s %d/%-4d %-4x %d",
log.Debugf("[tun] %s -> %s %-4s %d/%-4d %-4x %d",
header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol(b[:n])),
header.Len, header.TotalLen, header.ID, header.Flags)
}
@@ -277,18 +277,18 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
} else if waterutil.IsIPv6(b[:n]) {
header, err := ipv6.ParseHeader(b[:n])
if err != nil {
log.Logf("[tun] %s: %v", tun.LocalAddr(), err)
log.Debugf("[tun] %s: %v", tun.LocalAddr(), err)
return nil
}
if util.Debug {
log.Logf("[tun] %s -> %s %s %d %d",
log.Debugf("[tun] %s -> %s %s %d %d",
header.Src, header.Dst,
ipProtocol(waterutil.IPProtocol(header.NextHeader)),
header.PayloadLen, header.TrafficClass)
}
src, dst = header.Src, header.Dst
} else {
log.Logf("[tun] unknown packet")
log.Debugf("[tun] unknown packet")
return nil
}
@@ -301,17 +301,17 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
rkey := ipToTunRouteKey(src)
if actual, loaded := h.routes.LoadOrStore(rkey, addr); loaded {
if actual.(net.Addr).String() != addr.String() {
log.Logf("[tun] update route: %s -> %s (old %s)",
log.Debugf("[tun] update route: %s -> %s (old %s)",
src, addr, actual.(net.Addr))
h.routes.Store(rkey, addr)
}
} else {
log.Logf("[tun] new route: %s -> %s", src, addr)
log.Debugf("[tun] new route: %s -> %s", src, addr)
}
if addr := h.findRouteFor(dst); addr != nil {
if util.Debug {
log.Logf("[tun] find route: %s -> %s", dst, addr)
log.Debugf("[tun] find route: %s -> %s", dst, addr)
}
_, err := conn.WriteTo(b[:n], addr)
return err

1
go.mod
View File

@@ -6,7 +6,6 @@ require (
github.com/datawire/dlib v1.2.4
github.com/docker/libcontainer v2.2.1+incompatible
github.com/ginuerzh/gosocks5 v0.2.0
github.com/go-log/log v0.2.0
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/google/go-cmp v0.5.5 // indirect
github.com/googleapis/gnostic v0.5.1 // indirect

2
go.sum
View File

@@ -126,8 +126,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-log/log v0.2.0 h1:z8i91GBudxD5L3RmF0KVpetCbcGWAV7q1Tw1eRwQM9Q=
github.com/go-log/log v0.2.0/go.mod h1:xzCnwajcues/6w7lne3yK2QU7DBPW7kqbgPGG5AF65U=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=

View File

@@ -8,7 +8,6 @@ import (
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"kubevpn/core"
"kubevpn/util"
)
@@ -24,7 +23,6 @@ var (
)
func init() {
util.SetLogger(&core.LogLogger{})
connectCmd.Flags().StringVar(&kubeconfigpath, "kubeconfig", clientcmd.RecommendedHomeFile, "kubeconfig")
connectCmd.Flags().StringVarP(&namespace, "namespace", "n", "", "namespace")
connectCmd.PersistentFlags().StringArrayVar(&workloads, "workloads", []string{}, "workloads, like: services/tomcat, deployment/nginx, replicaset/tomcat...")
@@ -40,6 +38,7 @@ var connectCmd = &cobra.Command{
return nil
},
Run: func(cmd *cobra.Command, args []string) {
util.SetupLogger()
InitClient()
Main()
// hang up
@@ -48,7 +47,7 @@ var connectCmd = &cobra.Command{
}
func InitClient() {
log.Printf("kubeconfig path: %s, namespace: %s, serivces: %v\n", kubeconfigpath, namespace, workloads)
log.Infof("kubeconfig path: %s, namespace: %s, serivces: %v", kubeconfigpath, namespace, workloads)
var err error
configFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
configFlags.KubeConfig = &kubeconfigpath

View File

@@ -2,8 +2,8 @@ package main
import (
"context"
"github.com/go-log/log"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"kubevpn/core"
"kubevpn/tun"
"net"
@@ -145,7 +145,7 @@ type router struct {
}
func (r *router) Serve(ctx context.Context) error {
log.Logf("%s on %s", r.node.String(), r.server.Addr())
log.Debugf("%s on %s", r.node.String(), r.server.Addr())
return r.server.Serve(ctx, r.handler)
}

View File

@@ -3,12 +3,10 @@ package main
import (
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"kubevpn/core"
"kubevpn/util"
)
func init() {
util.SetLogger(&core.LogLogger{})
ServerCmd.Flags().StringArrayVarP(&nodeConfig.ServeNodes, "nodeCommand", "L", []string{}, "command needs to be executed")
ServerCmd.Flags().StringVarP(&nodeConfig.ChainNodes, "chainCommand", "F", "", "command needs to be executed")
ServerCmd.Flags().BoolVar(&util.Debug, "debug", false, "true/false")
@@ -23,6 +21,7 @@ var ServerCmd = &cobra.Command{
return nil
},
Run: func(cmd *cobra.Command, args []string) {
util.SetupLogger()
if err := start(); err != nil {
log.Fatal(err)
}

View File

@@ -2,7 +2,7 @@ package tun
import (
"errors"
"github.com/go-log/log"
log "github.com/sirupsen/logrus"
"github.com/songgao/water"
"net"
"os"
@@ -44,7 +44,7 @@ func TunListener(cfg TunConfig) (Listener, error) {
addrs, _ := ifce.Addrs()
_ = os.Setenv("tunName", ifce.Name)
log.Logf("[tun] %s: name: %s, mtu: %d, addrs: %s",
log.Debugf("[tun] %s: name: %s, mtu: %d, addrs: %s",
conn.LocalAddr(), ifce.Name, ifce.MTU, addrs)
ln.conns <- conn

View File

@@ -7,7 +7,7 @@ import (
"os/exec"
"strings"
"github.com/go-log/log"
log "github.com/sirupsen/logrus"
"github.com/songgao/water"
)
@@ -35,7 +35,7 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
}
cmd := fmt.Sprintf("ifconfig %s inet %s %s mtu %d up",
ifce.Name(), cfg.Addr, peer, mtu)
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
err = fmt.Errorf("%s: %v", cmd, er)
@@ -64,7 +64,7 @@ func addTunRoutes(ifName string, routes ...IPRoute) error {
continue
}
cmd := fmt.Sprintf("route add -net %s -interface %s", route.Dest.String(), ifName)
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)

View File

@@ -8,8 +8,8 @@ import (
"syscall"
"github.com/docker/libcontainer/netlink"
"github.com/go-log/log"
"github.com/milosgajdos/tenus"
log "github.com/sirupsen/logrus"
"github.com/songgao/water"
)
@@ -40,21 +40,21 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
}
cmd := fmt.Sprintf("ip link set dev %s mtu %d", ifce.Name(), mtu)
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
if er := link.SetLinkMTU(mtu); er != nil {
err = fmt.Errorf("%s: %v", cmd, er)
return
}
cmd = fmt.Sprintf("ip address add %s dev %s", cfg.Addr, ifce.Name())
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
if er := link.SetLinkIp(ip, ipNet); er != nil {
err = fmt.Errorf("%s: %v", cmd, er)
return
}
cmd = fmt.Sprintf("ip link set dev %s up", ifce.Name())
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
if er := link.SetLinkUp(); er != nil {
err = fmt.Errorf("%s: %v", cmd, er)
return
@@ -82,7 +82,7 @@ func addTunRoutes(ifName string, routes ...IPRoute) error {
continue
}
cmd := fmt.Sprintf("ip route add %s dev %s", route.Dest.String(), ifName)
log.Logf("[tun] %s", cmd)
log.Debugf("[tun] %s", cmd)
if err := netlink.AddRoute(route.Dest.String(), "", "", ifName); err != nil && !errors.Is(err, syscall.EEXIST) {
return fmt.Errorf("%s: %v", cmd, err)
}

View File

@@ -10,7 +10,7 @@ import (
"os/exec"
"strings"
"github.com/go-log/log"
log "github.com/sirupsen/logrus"
"github.com/songgao/water"
)
@@ -33,7 +33,7 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
}
cmd := fmt.Sprintf("ifconfig %s inet %s mtu %d up", ifce.Name(), cfg.Addr, mtu)
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
err = fmt.Errorf("%s: %v", cmd, er)
@@ -62,7 +62,7 @@ func addTunRoutes(ifName string, routes ...IPRoute) error {
continue
}
cmd := fmt.Sprintf("route add -net %s -interface %s", route.Dest.String(), ifName)
log.Logf("[tun] %s", cmd)
log.Debugf("[tun] %s", cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)

View File

@@ -14,7 +14,7 @@ import (
"strings"
"time"
"github.com/go-log/log"
log "github.com/sirupsen/logrus"
)
func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
@@ -31,7 +31,7 @@ func createTun(cfg TunConfig) (conn net.Conn, itf *net.Interface, err error) {
cmd := fmt.Sprintf("netsh interface ip set address name=\"%s\" "+
"source=static addr=%s mask=%s gateway=none",
name, ip.String(), ipMask(ipNet.Mask))
log.Log("[tun]", cmd)
log.Debug("[tun]", cmd)
args := strings.Split(cmd, " ")
err = retry.OnError(retry.DefaultRetry, func(err error) bool {
@@ -184,7 +184,7 @@ func addTunRoutes(ifName string, gw string, routes ...IPRoute) error {
if gw != "" {
cmd += " nexthop=" + gw
}
log.Logf("[tun] %s", cmd)
log.Debugf("[tun] %s", cmd)
args := strings.Split(cmd, " ")
if er := exec.Command(args[0], args[1:]...).Run(); er != nil {
return fmt.Errorf("%s: %v", cmd, er)

View File

@@ -3,15 +3,12 @@ package util
import (
"sync"
"time"
"github.com/go-log/log"
)
// Debug is a flag that enables the debug log.
var Debug bool
var (
tinyBufferSize = 512
smallBufferSize = 2 * 1024 // 2KB small buffer
mediumBufferSize = 8 * 1024 // 8KB medium buffer
largeBufferSize = 32 * 1024 // 32KB large buffer
@@ -51,11 +48,5 @@ var (
)
var (
// DefaultMTU is the default mtu for tun/tap device
DefaultMTU = 1350
)
// SetLogger sets a new logger for internal log system.
func SetLogger(logger log.Logger) {
log.DefaultLogger = logger
}

29
util/log.go Normal file
View File

@@ -0,0 +1,29 @@
package util
import (
"fmt"
log "github.com/sirupsen/logrus"
"path/filepath"
)
func SetupLogger() {
if Debug {
log.SetLevel(log.DebugLevel)
}
log.SetReportCaller(true)
log.SetFormatter(&Format{})
}
type Format struct {
log.Formatter
}
// 2009/01/23 01:23:23 d.go:23: message
func (*Format) Format(e *log.Entry) ([]byte, error) {
return []byte(
fmt.Sprintf("%s %s:%d: %s\n",
e.Time.Format("2006/01/02 15:04:05"),
filepath.Base(e.Caller.File),
e.Caller.Line,
e.Message)), nil
}