package capture import ( "equipment-analyzer/internal/model" "fmt" "github.com/google/gopacket/pcap" "log" ) // GetNetworkInterfaces 获取网络接口列表 func GetNetworkInterfaces() ([]model.NetworkInterface, error) { devices, err := pcap.FindAllDevs() if err != nil { return nil, fmt.Errorf("failed to find network devices: %v", err) } log.Printf("抓取到的网卡设备数量: %d", len(devices)) // 打印网卡总数 var interfaces []model.NetworkInterface for _, device := range devices { // 跳过回环接口 if device.Name == "lo" || device.Name == "loopback" { continue } log.Printf("网卡名称: %s, 描述: %s", device.Name, device.Description) // 打印每个网卡的名称和描述 // 提取IP地址 var addresses []string for _, address := range device.Addresses { addresses = append(addresses, address.IP.String()) } interfaceInfo := model.NetworkInterface{ Name: device.Name, Description: device.Description, Addresses: addresses, IsLoopback: device.Name == "lo" || device.Name == "loopback", } interfaces = append(interfaces, interfaceInfo) } return interfaces, nil } // GetDefaultInterface 获取默认网络接口 func GetDefaultInterface() (*model.NetworkInterface, error) { interfaces, err := GetNetworkInterfaces() if err != nil { return nil, err } // 查找第一个非回环接口 for _, iface := range interfaces { if !iface.IsLoopback && len(iface.Addresses) > 0 { return &iface, nil } } return nil, fmt.Errorf("no suitable network interface found") } // ValidateInterface 验证网络接口是否可用 func ValidateInterface(interfaceName string) error { devices, err := pcap.FindAllDevs() if err != nil { return fmt.Errorf("failed to find network devices: %v", err) } for _, device := range devices { if device.Name == interfaceName { return nil } } return fmt.Errorf("interface %s not found", interfaceName) }