//go:build windows // Package collector 提供 Windows 网络连接基础采集能力。 // Logan.Li package collector import ( "bytes" "os/exec" "strings" "ezops/agent/model" ) type NetworkCollector struct{} func NewNetworkCollector() *NetworkCollector { return &NetworkCollector{} } func (c *NetworkCollector) Collect() (model.NetworkStat, error) { stat := model.NetworkStat{NicName: firstWindowsNIC()} out, err := exec.Command("netstat", "-ano", "-p", "tcp").Output() if err != nil { return stat, nil } for _, line := range strings.Split(string(out), "\n") { fields := strings.Fields(line) if len(fields) < 4 || strings.ToUpper(fields[0]) != "TCP" { continue } state := strings.ToUpper(fields[3]) switch state { case "ESTABLISHED": stat.TCPEstablished++ case "TIME_WAIT": stat.TCPTimeWait++ case "CLOSE_WAIT": stat.TCPCloseWait++ } stat.TCPTotal++ } return stat, nil } func firstWindowsNIC() string { out, err := exec.Command("powershell.exe", "-NoProfile", "-Command", "Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object -First 1 -ExpandProperty Name").Output() if err == nil { if name := strings.TrimSpace(string(bytes.TrimSpace(out))); name != "" { return name } } return "Ethernet" }