在https://godoc.org/golang.org/x/net/icmp#ListenPacket文档中,它提到:
对于面向非特权数据报的ICMP端点,网络必须是“ udp4”或“ udp6”。端点允许读取,写入一些有限的ICMP消息,例如回显请求和回显应答。目前只达尔文和Linux支持此功能。
但是当我尝试此代码时:
icmp.ListenPacket("udp4", "127.0.0.1")
socket: permission denied
错误返回。我的代码有问题吗?
我使用Ubuntu 18.04
您需要在进程上设置CAP_NET_RAW
(或root)。为此,
sudo
以root身份运行sudo setcap cap_net_raw+p /path/to/you/program