python非特权ICMP
答案通常归结为“使用具有root特权的第三方模块”或“使用系统的ping命令并解析输出”。在本地方法中,icmplib和M.
Cowles和J.
Diemer的ping.py明确提到了对root特权的需求,以及scapy
手册。
因此,从这一方面来说,在本地发送没有特殊特权的ICMP ping似乎是不可能的。system
ping命令确实以某种方式进行管理,但其手册页并未说明如何进行。另一方面,icmp的手册页似乎说有可能:
非特权ICMP
可以使用SOCK_DGRAM套接字类型打开ICMP套接字,而无需
需要root特权。内容简介如下:
套接字(AF_INET,SOCK_DGRAM,IPPROTO_ICMP)
面向数据报的ICMP套接字提供了部分可用功能-
能够原始ICMP套接字。仅IMCP请求以下消息
可以发送以下类型:ICMP_ECHO,ICMP_TSTAMP或ICMP_MASKREQ。
因此,至少根据icmp看来,这是允许的。那么,为什么所有的python工具都无法做到这一点呢?python工具是否太通用,并且希望特权套接字上的任何工作都可以特权?是否可以在C中编写一个可以在没有root特权的情况下ping的ping函数,并以此扩展python?有人这样做吗?我只是误解了这个问题吗?