- 新增数据库相关 API 和服务 - 实现数据导出功能,支持导出到 JSON 文件 - 优化数据导入流程,增加数据校验 - 新增数据库页面,展示解析数据和统计信息 - 更新捕获页面,支持导入数据到数据库
79 lines
1.9 KiB
Go
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)
|
|
}
|