Files
pika/pkg/agent/collector/monitor_icmp_unix.go
T
dushixiangandClaude Opus 4.7 fe388df67d Windows 下 ICMP 探测改用 ping.exe,避开 raw socket 权限限制
pro-bing 在 Windows 上必须 SetPrivileged(true) 走原始套接字,普通账号
没有权限会直接失败。按平台拆分实现:unix 继续走 pro-bing,windows 调
系统 ping 并以 TTL= 作为跨语言锚点解析输出;同时校验 target 防止被
ping.exe 当作 flag 解析。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:39:40 +08:00

38 lines
826 B
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//go:build !windows
package collector
import (
"time"
probing "github.com/prometheus-community/pro-bing"
)
func pingHost(target string, count, timeoutSec int) (*pingStats, error) {
pinger, err := probing.NewPinger(target)
if err != nil {
return nil, err
}
pinger.Count = count
pinger.Timeout = time.Duration(timeoutSec) * time.Second
pinger.Interval = 100 * time.Millisecond
pinger.SetPrivileged(false)
if err := pinger.Run(); err != nil {
// 非特权 UDP ICMP 不可用时回退到 raw socket(需要 root / CAP_NET_RAW)
pinger.SetPrivileged(true)
if err := pinger.Run(); err != nil {
return nil, err
}
}
s := pinger.Statistics()
return &pingStats{
PacketsSent: s.PacketsSent,
PacketsRecv: s.PacketsRecv,
AvgRttMs: s.AvgRtt.Milliseconds(),
PacketLoss: s.PacketLoss,
}, nil
}