在linux下创建socket原始套接字ICMP,会报不允许操作

问题遇到的现象和发生背景

想用套接字ping指定ip查看是否有网络连接,但创建套接字socket的时候就返回了-1

问题相关代码,请勿粘贴截图

socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) == -1

运行结果及报错内容

img

我的解答思路和尝试过的方法

之前想用qt判断是否有网络,但是判断不准确,如果用信号槽又打不到要求。

我想要达到的结果

我希望能在linux下准确判断是否能连接指定ip,网络是否联通。

原始套接字只有在root用户才可以创建,参考如下:

img

如果你只是想判断是否能连接指定ip,用TCP连接就可以了。如果TCP能连接说明肯定是能ping通的。
或者通过shell直接运行ping,获取ping的返回结果来判断。ping实际也是通过tcp来实现的。所以不如直接用TCP来判断

其实你没必要用socket创建原始套接字
直接调用系统的ping,然后获取返回结果,也能实现一样的效果
而且如果对方有防火墙禁止ping的话,这种方式其实并不准确
你应该去获取交换机的arp,看哪些ip在线,对应的mac又是多少

有没有C语言进行判断。
有代码参考吗

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632