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

     
  • 相关阅读:
    安装pandas所需c及c++依赖
    linux中文临时生效
    标维参考命令
    linux运维
    prop属性
    centos python虚拟环境安装
    centos7&python3.6uwsgi安装
    react 入坑笔记(六)
    js 实现数据结构 -- 集合(MySet)
    js 实现数据结构 -- 链表(LinkedList)
  • 原文地址:https://www.cnblogs.com/jiaojiner/p/15153735.html
Copyright © 2011-2022 走看看