init
This commit is contained in:
73
internal/capture/interface.go
Normal file
73
internal/capture/interface.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package capture
|
||||
|
||||
import (
|
||||
"equipment-analyzer/internal/model"
|
||||
"fmt"
|
||||
"github.com/google/gopacket/pcap"
|
||||
)
|
||||
|
||||
// GetNetworkInterfaces 获取网络接口列表
|
||||
func GetNetworkInterfaces() ([]model.NetworkInterface, error) {
|
||||
devices, err := pcap.FindAllDevs()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to find network devices: %v", err)
|
||||
}
|
||||
|
||||
var interfaces []model.NetworkInterface
|
||||
for _, device := range devices {
|
||||
// 跳过回环接口
|
||||
if device.Name == "lo" || device.Name == "loopback" {
|
||||
continue
|
||||
}
|
||||
|
||||
// 提取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)
|
||||
}
|
||||
Reference in New Issue
Block a user