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