Files
wails-epic/internal/capture/interface.go
hxt 3af8fd6e5e docs(README): 更新安装后端依赖说明
- 添加安装 Wails 最新版本的命令
- 更新 package.json.md5 校验值
2025-07-02 21:20:58 +08:00

79 lines
1.9 KiB
Go

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)
}