From 29c7c81f9ae7a463ea472c17595b87edbfbb8b46 Mon Sep 17 00:00:00 2001 From: spiritlhl <103393591+spiritLHLS@users.noreply.github.com> Date: Mon, 24 Jun 2024 08:01:58 +0000 Subject: [PATCH] =?UTF-8?q?0.0.2=20-=20=E5=A2=9E=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=E7=9A=84=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bk/listen_darwin.go | 59 +++++++++++++++++++++++++++++------------ bk/listen_freebsd.go | 59 +++++++++++++++++++++++++++++------------ bk/listen_linux.go | 59 +++++++++++++++++++++++++++++------------ bk/listen_openbsd.go | 59 +++++++++++++++++++++++++++++------------ bk/listen_windows.go | 62 +++++++++++++++++++++++++++++--------------- bk/version.go | 3 ++- cmd/main.go | 1 + 7 files changed, 216 insertions(+), 86 deletions(-) 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)