zoukankan      html  css  js  c++  java
  • Linux环境下无法使用非权威ping问题

    Linux环境下无法使用非权威ping问题(github.com/go-ping/ping包)

    问题:在Linux环境中手动使用ping命令是可以正常执行的,但是golang程序调用go-ping包则会返回socket: permission denied错误,导致程序失败

    程序源码

    //测试3个包, 不能ping通则返回false;
    func pings(ip string) (bool, error) {
    
    	pinger, err := ping.NewPinger(ip)
    	if err != nil {
    		return false, err
    	}
    	//测试3个包
    	pinger.Count = 3
    	pinger.Timeout = 3000000000 //3 秒超时
    	err = pinger.Run()          // Blocks until finished.
    	if err != nil {
    		return false, err
    	}
    	stats := pinger.Statistics() // get send/receive/rtt stats
    	fmt.Println("stats.PacketLoss is; ", stats.PacketLoss)
    
    	//如果丢包100%
    	if stats.PacketLoss == 100 {
    		return false, nil
    	}
    	//不丢包返回true
    	return true, nil
    
    }
    
    func main() {
    
    	b, err := pings("x.x.x.x")
    	fmt.Println("---", b)
    	fmt.Println("err is: ", err)
    }
    

     

    具体原因

    这是一个sysctl设置,用于限制允许在Alpine上ping的用户ID范围。让所有用户可以ping

    临时解决:sudo sysctl -w net.ipv4.ping_group_range="0   2147483647"

    永久化,echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.conf

     
  • 相关阅读:
    [BZOJ5339] [TJOI2018]教科书般的亵渎
    拉格朗日插值法
    [LOJ#2340] [WC2018] 州区划分
    [洛谷4609] [FJOI2016]建筑师
    [CF960G] Bandit Blues
    [BZOJ2115] [WC2011] Xor
    [Codeforces 809E] Surprise me!
    无需AutoCAD,用C#生成DWG文件
    扩展方法的几点总结
    RedirectStandardOutput
  • 原文地址:https://www.cnblogs.com/jiaojiner/p/15153735.html
Copyright © 2011-2022 走看看