feat(d-eyes): init
This commit is contained in:
103
basicinfo/info/network_windows.go
Normal file
103
basicinfo/info/network_windows.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package info
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/olekukonko/tablewriter"
|
||||
"github.com/shirou/gopsutil/v3/process"
|
||||
|
||||
"d-eyes/basicinfo/utils"
|
||||
)
|
||||
|
||||
// remote connection ip
|
||||
func DisplayNetStat(srcPath string) {
|
||||
networkData := make([][]string, 0)
|
||||
var remoteIp []string
|
||||
ps, err := process.Processes()
|
||||
if err != nil {
|
||||
fmt.Println("Error:", err)
|
||||
return
|
||||
}
|
||||
for _, p := range ps {
|
||||
|
||||
pid := os.Getpid()
|
||||
if pid == int(p.Pid) || p.Pid == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
connList := make([]string, 0)
|
||||
connection := make([]string, 0)
|
||||
_pc, _ := p.Connections()
|
||||
for _, conn := range _pc {
|
||||
if conn.Family == 1 {
|
||||
continue
|
||||
}
|
||||
c := fmt.Sprintf(
|
||||
"%v:%v<->%v:%v(%v)\n",
|
||||
conn.Laddr.IP, conn.Laddr.Port, conn.Raddr.IP, conn.Raddr.Port, conn.Status,
|
||||
)
|
||||
remoteIp = append(remoteIp, conn.Raddr.IP)
|
||||
|
||||
connection = append(connection, c)
|
||||
}
|
||||
_pUname, _ := p.Username()
|
||||
if len(connection) > 0 && _pUname != "" {
|
||||
network := strings.Join(connection, "")
|
||||
_exe, _ := p.Exe()
|
||||
path := utils.StringNewLine(_exe, 25)
|
||||
username, _ := p.Username()
|
||||
connList = append(connList, fmt.Sprintf("%v", p.Pid), fmt.Sprintf("%v", username), network, path)
|
||||
networkData = append(networkData, connList)
|
||||
}
|
||||
}
|
||||
|
||||
tableConn := tablewriter.NewWriter(os.Stdout)
|
||||
tableConn.SetHeader([]string{"pid", "user", "local/remote(TCP Status)", "program name"})
|
||||
tableConn.SetBorder(true)
|
||||
tableConn.SetRowLine(true)
|
||||
tableConn.AppendBulk(networkData)
|
||||
tableConn.Render()
|
||||
remoteIpNew := RemoveRepeatedElement(remoteIp)
|
||||
|
||||
if len(remoteIpNew) > 0 {
|
||||
|
||||
f, err := os.Create(srcPath + "RemoteConnectionIP.csv")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f.WriteString("\xEF\xBB\xBF")
|
||||
writer := csv.NewWriter(f)
|
||||
length := len(remoteIpNew)
|
||||
for i := 0; i < length; i++ {
|
||||
writer.Write([]string{remoteIpNew[i]})
|
||||
}
|
||||
writer.Flush()
|
||||
f.Close()
|
||||
fmt.Println("The IP of the local remote connection has been exported to 'RemoteConnectionIP.csv'.")
|
||||
} else {
|
||||
fmt.Println("\nThere is no remote connection IP on this host.")
|
||||
}
|
||||
}
|
||||
|
||||
func RemoveRepeatedElement(arr []string) (newArr []string) {
|
||||
newArr = make([]string, 0)
|
||||
for i := 0; i < len(arr); i++ {
|
||||
if arr[i] == "127.0.0.1" || arr[i] == "0.0.0.0" || arr[i] == "::" || arr[i] == "::1" || arr[i] == "" {
|
||||
continue
|
||||
}
|
||||
repeat := false
|
||||
for j := i + 1; j < len(arr); j++ {
|
||||
if arr[i] == arr[j] {
|
||||
repeat = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !repeat {
|
||||
newArr = append(newArr, arr[i])
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user