diff --git a/bk/listen_darwin.go b/bk/listen_darwin.go index 1d27211..df868f2 100644 --- a/bk/listen_darwin.go +++ b/bk/listen_darwin.go @@ -3,24 +3,51 @@ package backtrace import ( "net" "syscall" + + . "github.com/oneclickvirt/defaultset" ) func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - conn, err := net.ListenIP(network, laddr) - if err != nil { - return nil, err + if EnableLoger { + InitLogger() + defer Logger.Sync() + conn, err := net.ListenIP(network, laddr) + if err != nil { + Logger.Info(err.Error()) + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + return conn, nil + } else { + conn, err := net.ListenIP(network, laddr) + if err != nil { + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + conn.Close() + return nil, err + } + return conn, nil } - raw, err := conn.SyscallConn() - if err != nil { - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - conn.Close() - return nil, err - } - return conn, nil } diff --git a/bk/listen_freebsd.go b/bk/listen_freebsd.go index 1d27211..df868f2 100644 --- a/bk/listen_freebsd.go +++ b/bk/listen_freebsd.go @@ -3,24 +3,51 @@ package backtrace import ( "net" "syscall" + + . "github.com/oneclickvirt/defaultset" ) func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - conn, err := net.ListenIP(network, laddr) - if err != nil { - return nil, err + if EnableLoger { + InitLogger() + defer Logger.Sync() + conn, err := net.ListenIP(network, laddr) + if err != nil { + Logger.Info(err.Error()) + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + return conn, nil + } else { + conn, err := net.ListenIP(network, laddr) + if err != nil { + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + conn.Close() + return nil, err + } + return conn, nil } - raw, err := conn.SyscallConn() - if err != nil { - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - conn.Close() - return nil, err - } - return conn, nil } diff --git a/bk/listen_linux.go b/bk/listen_linux.go index 1d27211..df868f2 100644 --- a/bk/listen_linux.go +++ b/bk/listen_linux.go @@ -3,24 +3,51 @@ package backtrace import ( "net" "syscall" + + . "github.com/oneclickvirt/defaultset" ) func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - conn, err := net.ListenIP(network, laddr) - if err != nil { - return nil, err + if EnableLoger { + InitLogger() + defer Logger.Sync() + conn, err := net.ListenIP(network, laddr) + if err != nil { + Logger.Info(err.Error()) + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + return conn, nil + } else { + conn, err := net.ListenIP(network, laddr) + if err != nil { + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + conn.Close() + return nil, err + } + return conn, nil } - raw, err := conn.SyscallConn() - if err != nil { - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - conn.Close() - return nil, err - } - return conn, nil } diff --git a/bk/listen_openbsd.go b/bk/listen_openbsd.go index 1d27211..df868f2 100644 --- a/bk/listen_openbsd.go +++ b/bk/listen_openbsd.go @@ -3,24 +3,51 @@ package backtrace import ( "net" "syscall" + + . "github.com/oneclickvirt/defaultset" ) func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - conn, err := net.ListenIP(network, laddr) - if err != nil { - return nil, err + if EnableLoger { + InitLogger() + defer Logger.Sync() + conn, err := net.ListenIP(network, laddr) + if err != nil { + Logger.Info(err.Error()) + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + return conn, nil + } else { + conn, err := net.ListenIP(network, laddr) + if err != nil { + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) + }) + if err != nil { + conn.Close() + return nil, err + } + return conn, nil } - raw, err := conn.SyscallConn() - if err != nil { - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_HDRINCL, 1) - }) - if err != nil { - conn.Close() - return nil, err - } - return conn, nil } diff --git a/bk/listen_windows.go b/bk/listen_windows.go index 800273f..b59c50a 100644 --- a/bk/listen_windows.go +++ b/bk/listen_windows.go @@ -11,26 +11,46 @@ import ( ) func (t *Tracer) listen(network string, laddr *net.IPAddr) (*net.IPConn, error) { - InitLogger() - defer Logger.Sync() - conn, err := net.ListenIP(network, laddr) - if err != nil { - Logger.Info(err.Error()) - return nil, err + if EnableLoger { + InitLogger() + defer Logger.Sync() + conn, err := net.ListenIP(network, laddr) + if err != nil { + Logger.Info(err.Error()) + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, windows.IP_HDRINCL, 1) + }) + if err != nil { + Logger.Info(err.Error()) + conn.Close() + return nil, err + } + return conn, nil + } else { + conn, err := net.ListenIP(network, laddr) + if err != nil { + return nil, err + } + raw, err := conn.SyscallConn() + if err != nil { + conn.Close() + return nil, err + } + _ = raw.Control(func(fd uintptr) { + err = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, windows.IP_HDRINCL, 1) + }) + if err != nil { + conn.Close() + return nil, err + } + return conn, nil } - raw, err := conn.SyscallConn() - if err != nil { - Logger.Info(err.Error()) - conn.Close() - return nil, err - } - _ = raw.Control(func(fd uintptr) { - err = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, windows.IP_HDRINCL, 1) - }) - if err != nil { - Logger.Info(err.Error()) - conn.Close() - return nil, err - } - return conn, nil } diff --git a/bk/version.go b/bk/version.go index b6469b9..df130cd 100644 --- a/bk/version.go +++ b/bk/version.go @@ -1,3 +1,4 @@ package backtrace -const BackTraceVersion = "0.0.1" \ No newline at end of file +const BackTraceVersion = "0.0.2" +var EnableLoger bool \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go index 5d728c8..df8fa64 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -25,6 +25,7 @@ func main() { fmt.Println(Green("项目地址:"), Yellow("https://github.com/oneclickvirt/backtrace")) var showVersion bool flag.BoolVar(&showVersion, "v", false, "show version") + flag.BoolVar(&backtrace.EnableLoger, "e", false, "Enable logging") flag.Parse() if showVersion { fmt.Println(backtrace.BackTraceVersion)