62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package processor
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"ems.agt/src/framework/logger"
|
|
"ems.agt/src/framework/vo/result"
|
|
"ems.agt/src/modules/ws/model"
|
|
"github.com/shirou/gopsutil/v3/net"
|
|
"github.com/shirou/gopsutil/v3/process"
|
|
)
|
|
|
|
// GetNetConnections 获取网络连接进程
|
|
func GetNetConnections(requestID string, data any) ([]byte, error) {
|
|
msgByte, _ := json.Marshal(data)
|
|
var query model.NetConnectQuery
|
|
err := json.Unmarshal(msgByte, &query)
|
|
if err != nil {
|
|
logger.Warnf("ws processor GetNetConnections err: %s", err.Error())
|
|
return nil, fmt.Errorf("query data structure error")
|
|
}
|
|
|
|
dataArr := []model.NetConnectData{}
|
|
for _, netType := range [...]string{"tcp", "udp"} {
|
|
connections, err := net.Connections(netType)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
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
|
|
}
|
|
dataArr = append(dataArr, model.NetConnectData{
|
|
Type: netType,
|
|
Status: conn.Status,
|
|
Laddr: conn.Laddr,
|
|
Raddr: conn.Raddr,
|
|
PID: conn.Pid,
|
|
Name: name,
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
resultByte, err := json.Marshal(result.Ok(map[string]any{
|
|
"requestID": requestID,
|
|
"data": dataArr,
|
|
}))
|
|
return resultByte, err
|
|
}
|