基本代码是:
__PRE__
我怎么能ping一个网站或地址?
在尝试从python中找出ping(ICMP)的最佳方法时,我遇到了以下问题:
答案通常归结为"使用具有root权限的第三方模块"或"使用系统的ping命令并解析输出".在本机方法中,icmplib和M. Cowles以及J. Diemer的ping.py明确提到了root权限的需要,scapy 手册也是如此.
所以从那个方面来看,原本发送没有特权的ICMP ping似乎是不可能的.系统ping命令确实以某种方式进行管理,但其手册页并未阐明如何操作.另一方面,icmp的手册页似乎表明它是可能的:
Non-privileged ICMP
ICMP sockets can be opened with the SOCK_DGRAM socket type without
requiring root privileges. The synopsis is the following:
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)
Datagram oriented ICMP sockets offer a subset of the functionality avail-
able to raw ICMP sockets. Only IMCP request messages of the following
types can be sent: ICMP_ECHO, ICMP_TSTAMP or ICMP_MASKREQ.
所以看起来,至少根据icmp,它是允许的.那么为什么所有的python工具都无法做到这一点呢?python工具是否过于笼统,并期望特权套接字上的任何工作都具有特权?是否有可能在C中编写ping函数,可以在没有root权限的情况下ping,并用此扩展python?有没有人这样做过?我只是误解了这个问题吗?
我希望能够在Python中执行ping和traceroute而无需执行相应的shell命令,因此我更喜欢本机python解决方案.