网卡IP采集过滤本地单播地址

网卡IP采集过滤本地单播地址,例如 fe80::f816:3eff:fe68:fb57/64、fe80::5054:ff:fe74:1d69/64 等
This commit is contained in:
榆木 committed 2026-01-11 17:55:49 +08:00
1 parent 6f2e48626b
commit fd7a083139
2 files changed
+28 -5

No files matched your search

+11
View File
@@ -3,6 +3,7 @@ package audit
import (
"bufio"
"fmt"
"net"
"os"
"os/exec"
"strings"
@@ -177,6 +178,16 @@ func (nac *NetworkAssetsCollector) collectInterfaces() []protocol.NetworkInterfa
// 提取IP地址
for _, addr := range iface.Addrs {
// 过滤 fe80::/10 (Link-Local) 地址
ip := net.ParseIP(addr.Addr)
if ip == nil {
if parsedIP, _, err := net.ParseCIDR(addr.Addr); err == nil {
ip = parsedIP
}
}
if ip != nil && ip.IsLinkLocalUnicast() {
continue
}
netInterface.Addresses = append(netInterface.Addresses, addr.Addr)
}
+17 -5
View File
@@ -1,11 +1,12 @@
package collector
import (
"net"
"time"
"github.com/dushixiang/pika/internal/protocol"
"github.com/dushixiang/pika/pkg/agent/config"
"github.com/shirou/gopsutil/v4/net"
gopsutilNet "github.com/shirou/gopsutil/v4/net"
)
// NetworkCollector 网络监控采集器
@@ -57,6 +58,17 @@ func (n *NetworkCollector) Collect() ([]protocol.NetworkData, error) {
// 获取 IP 地址列表
var addrs []string
for _, addr := range iface.Addrs {
// 过滤 fe80::/10 (Link-Local) 地址
ip := net.ParseIP(addr.Addr)
if ip == nil {
// 尝试处理带有 CIDR 的字符串
if parsedIP, _, err := net.ParseCIDR(addr.Addr); err == nil {
ip = parsedIP
}
}
if ip != nil && ip.IsLinkLocalUnicast() {
continue
}
addrs = append(addrs, addr.Addr)
}
@@ -68,7 +80,7 @@ func (n *NetworkCollector) Collect() ([]protocol.NetworkData, error) {
}
// 创建第一次采集的统计数据映射
firstStatsMap := make(map[string]net.IOCountersStat)
firstStatsMap := make(map[string]gopsutilNet.IOCountersStat)
for _, counter := range firstCounters {
firstStatsMap[counter.Name] = counter
}
@@ -113,15 +125,15 @@ func (n *NetworkCollector) Collect() ([]protocol.NetworkData, error) {
}
// collectOnce 执行一次网络数据采集
func (n *NetworkCollector) collectOnce() ([]net.IOCountersStat, []net.InterfaceStat, error) {
func (n *NetworkCollector) collectOnce() ([]gopsutilNet.IOCountersStat, []gopsutilNet.InterfaceStat, error) {
// 获取网络接口信息
interfaces, err := net.Interfaces()
interfaces, err := gopsutilNet.Interfaces()
if err != nil {
return nil, nil, err
}
// 获取网络 IO 统计
ioCounters, err := net.IOCounters(true)
ioCounters, err := gopsutilNet.IOCounters(true)
if err != nil {
return nil, nil, err
}