首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >戈朗非特权ICMP ping的go-ping库

戈朗非特权ICMP ping的go-ping库
EN

Stack Overflow用户
提问于 2017-01-02 08:44:36
回答 2查看 5.1K关注 0票数 1

我一直在使用go-ping库进行无特权的ping,并计算了戈朗的各种网络统计数据。代码片段为->

代码语言:javascript
复制
func (p *Ping) doPing() (latency, jitter, packetLoss float64, err error) {

    timeout := time.Second*1000
    interval := time.Second
    count := 5
    host := p.ipAddr
    pinger, cmdErr := ping.NewPinger(host)
    if cmdErr != nil {
            glog.Error("Failed to ping " + p.ipAddr)
            err = cmdErr
            return
    }


    pinger.Count = count
    pinger.Interval = interval
    pinger.Timeout = timeout
    pinger.SetPrivileged(false)
    pinger.Run()
    stats := pinger.Statistics()
    latency = float64(stats.AvgRtt)   
    jitter = float64(stats.StdDevRtt) 
    packetLoss = stats.PacketLoss
    return
}

它运行良好,但现在它已经开始抛出:-“错误侦听ICMP数据包:套接字:权限拒绝”错误。有人知道背后的原因吗?我使用的Go版本是go1.7.4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-02 10:57:51

确保你的设置没有以任何方式改变。从包中使用ping仍然适用于32位Ubuntu16.04和Go 1.7.4 (linux/386),如果我之前根据关于Github的说明设置了net.ipv4.ping_group_range。

关于Linux支持的说明: 此库试图通过UDP发送“非特权”ping。在linux上,必须通过设置 sudo sysctl -w net.ipv4.ping_group_range="0 2147483647" 如果您不希望这样做,您可以设置pinger.SetPrivileged(true)并使用setcap允许您的二进制文件使用go-ping绑定到原始套接字(或者只作为超级用户运行): setcap cap_net_raw=+ep /bin/goping-binary 有关更多细节,请参见这个博客围棋icmp库

票数 6
EN

Stack Overflow用户

发布于 2017-01-02 10:42:07

它位于您正在使用的库的README.md中:

此库试图通过UDP发送“非特权”ping。在linux上,必须通过设置

代码语言:javascript
复制
sudo sysctl -w net.ipv4.ping_group_range="0   2147483647"

如果您不希望这样做,您可以设置pinger.SetPrivileged(真),并使用setcap允许您的二进制文件使用go-ping绑定到原始套接字(或者只作为超级用户运行):

代码语言:javascript
复制
setcap cap_net_raw=+ep /bin/goping-binary

有关更多细节,请参阅此博客和Go icmp库。

希望能帮上忙!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41423637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档