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
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/sys_linux.go
3x-ui
Diffstat (limited to 'util/sys/sys_linux.go')
-rw-r--r--util/sys/sys_linux.go70
1 files changed, 70 insertions, 0 deletions
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
+}