From b73e4173a3c1e69e02ad6b4e3b43e425e57a5be9 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Thu, 9 Feb 2023 22:48:06 +0330 Subject: 3x-ui --- util/sys/sys_linux.go | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 util/sys/sys_linux.go (limited to 'util/sys/sys_linux.go') diff --git a/util/sys/sys_linux.go b/util/sys/sys_linux.go new file mode 100644 index 00000000..843d9b00 --- /dev/null +++ b/util/sys/sys_linux.go @@ -0,0 +1,70 @@ +// +build linux + +package sys + +import ( + "bytes" + "fmt" + "io" + "os" +) + +func getLinesNum(filename string) (int, error) { + file, err := os.Open(filename) + if err != nil { + return 0, err + } + defer file.Close() + + sum := 0 + buf := make([]byte, 8192) + for { + n, err := file.Read(buf) + + var buffPosition int + for { + i := bytes.IndexByte(buf[buffPosition:], '\n') + if i < 0 || n == buffPosition { + break + } + buffPosition += i + 1 + sum++ + } + + if err == io.EOF { + return sum, nil + } else if err != nil { + return sum, err + } + } +} + +func GetTCPCount() (int, error) { + root := HostProc() + + tcp4, err := getLinesNum(fmt.Sprintf("%v/net/tcp", root)) + if err != nil { + return tcp4, err + } + tcp6, err := getLinesNum(fmt.Sprintf("%v/net/tcp6", root)) + if err != nil { + return tcp4 + tcp6, nil + } + + return tcp4 + tcp6, nil +} + +func GetUDPCount() (int, error) { + root := HostProc() + + udp4, err := getLinesNum(fmt.Sprintf("%v/net/udp", root)) + if err != nil { + return udp4, err + } + udp6, err := getLinesNum(fmt.Sprintf("%v/net/udp6", root)) + if err != nil { + return udp4 + udp6, nil + } + + return udp4 + udp6, nil +} -- cgit v1.2.3