feat: ws获取网络连接进程
This commit is contained in:
53
src/modules/ws/processor/net_connect.go
Normal file
53
src/modules/ws/processor/net_connect.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package processor
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"ems.agt/src/modules/ws/model"
|
||||
"github.com/shirou/gopsutil/v3/net"
|
||||
"github.com/shirou/gopsutil/v3/process"
|
||||
)
|
||||
|
||||
// GetNetConnections 获取网络连接进程
|
||||
func GetNetConnections(data any) ([]byte, error) {
|
||||
msgByte, _ := json.Marshal(data)
|
||||
var query model.NetConnectQuery
|
||||
err := json.Unmarshal(msgByte, &query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := []model.NetConnectData{}
|
||||
for _, netType := range [...]string{"tcp", "udp"} {
|
||||
connections, _ := net.Connections(netType)
|
||||
if err == nil {
|
||||
for _, conn := range connections {
|
||||
if query.ProcessID > 0 && query.ProcessID != conn.Pid {
|
||||
continue
|
||||
}
|
||||
proc, err := process.NewProcess(conn.Pid)
|
||||
if err == nil {
|
||||
name, _ := proc.Name()
|
||||
if name != "" && query.ProcessName != "" && !strings.Contains(name, query.ProcessName) {
|
||||
continue
|
||||
}
|
||||
if query.Port > 0 && query.Port != int32(conn.Laddr.Port) && query.Port != int32(conn.Raddr.Port) {
|
||||
continue
|
||||
}
|
||||
result = append(result, model.NetConnectData{
|
||||
Type: netType,
|
||||
Status: conn.Status,
|
||||
Laddr: conn.Laddr,
|
||||
Raddr: conn.Raddr,
|
||||
PID: conn.Pid,
|
||||
Name: name,
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
resultByte, err := json.Marshal(result)
|
||||
return resultByte, err
|
||||
}
|
||||
Reference in New Issue
Block a user