package collector import ( "github.com/shirou/gopsutil/v3/net" ) type NetInterface struct { Name string `json:"name"` MACAddress string `json:"mac_address"` IPAddress string `json:"ip_address"` BytesSent uint64 `json:"bytes_sent"` BytesRecv uint64 `json:"bytes_recv"` Speed uint64 `json:"speed"` IsUp bool `json:"is_up"` } func CollectNetwork() ([]NetInterface, error) { interfaces, err := net.Interfaces() if err != nil { return nil, err } counters, err := net.IOCounters(true) if err != nil { return nil, err } counterMap := make(map[string]net.IOCountersStat) for _, c := range counters { counterMap[c.Name] = c } var nets []NetInterface for _, iface := range interfaces { if iface.Name == "lo" || iface.Name == "Loopback Pseudo-Interface 1" { continue } ni := NetInterface{ Name: iface.Name, MACAddress: iface.HardwareAddr, IsUp: false, } for _, addr := range iface.Addrs { if addr.Addr != "" && addr.Addr != "0.0.0.0" { ni.IPAddress = addr.Addr break } } for _, flag := range iface.Flags { if flag == "up" { ni.IsUp = true break } } if c, ok := counterMap[iface.Name]; ok { ni.BytesSent = c.BytesSent ni.BytesRecv = c.BytesRecv } nets = append(nets, ni) } return nets, nil }