在Python中,是否可以通过ICMP对服务器进行ping操作,如果服务器响应则返回TRUE,如果没有响应则返回FALSE?
此功能可在任何操作系统(Unix,Linux,macOS和Windows) Python 2和Python 3中使用
编辑: 被@radato os.system替换为subprocess.call。这样可以避免在主机名字符串可能未经验证的情况下出现外壳注入漏洞。
os.system
subprocess.call
import platform # For getting the operating system name import subprocess # For executing a shell command def ping(host): """ Returns True if host (str) responds to a ping request. Remember that a host may not respond to a ping (ICMP) request even if the host name is valid. """ # Option for the number of packets as a function of param = '-n' if platform.system().lower()=='windows' else '-c' # Building the command. Ex: "ping -c 1 google.com" command = ['ping', param, '1', host] return subprocess.call(command) == 0
请注意,根据Windows上的@ikrase,True如果遇到Destination Host Unreachable错误,此函数仍将返回。
True
Destination Host Unreachable
说明
该命令ping在Windows和类似Unix的系统中都可以使用。 选项-n(Windows)或-c(Unix)控制在此示例中设置为1的数据包数量。
ping
-n
-c
platform.system()返回平台名称。例如 'Darwin'在macOS上。 subprocess.call()执行系统调用。例如 subprocess.call(['ls','-l'])。
platform.system()
'Darwin'
subprocess.call()
subprocess.call(['ls','-l'])