Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/util/sys
diff options
context:
space:
mode:
authorMHSanaei <mc.sanaei@gmail.com>2023-02-09 22:18:06 +0300
committerMHSanaei <mc.sanaei@gmail.com>2023-02-09 22:18:06 +0300
commitb73e4173a3c1e69e02ad6b4e3b43e425e57a5be9 (patch)
treed95d2f5e903d97082e11eb9f9023c165b1bde388 /util/sys
3x-ui
Diffstat (limited to 'util/sys')
-rw-r--r--util/sys/a.s0
-rw-r--r--util/sys/psutil.go8
-rw-r--r--util/sys/sys_darwin.go23
-rw-r--r--util/sys/sys_linux.go70
4 files changed, 101 insertions, 0 deletions
diff --git a/util/sys/a.s b/util/sys/a.s
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/util/sys/a.s
diff --git a/util/sys/psutil.go b/util/sys/psutil.go
new file mode 100644
index 00000000..645f839a
--- /dev/null
+++ b/util/sys/psutil.go
@@ -0,0 +1,8 @@
+package sys
+
+import (
+ _ "unsafe"
+)
+
+//go:linkname HostProc github.com/shirou/gopsutil/internal/common.HostProc
+func HostProc(combineWith ...string) string
diff --git a/util/sys/sys_darwin.go b/util/sys/sys_darwin.go
new file mode 100644
index 00000000..d61a38a2
--- /dev/null
+++ b/util/sys/sys_darwin.go
@@ -0,0 +1,23 @@
+// +build darwin
+
+package sys
+
+import (
+ "github.com/shirou/gopsutil/net"
+)
+
+func GetTCPCount() (int, error) {
+ stats, err := net.Connections("tcp")
+ if err != nil {
+ return 0, err
+ }
+ return len(stats), nil
+}
+
+func GetUDPCount() (int, error) {
+ stats, err := net.Connections("udp")
+ if err != nil {
+ return 0, err
+ }
+ return len(stats), nil
+}
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
+}