[英]How to Grab IP address from ping in Python
我目前使用的是 python 2.7,需要 ping windows 和 linux。
我想创建一个函数,该函数将从 python 脚本中的 ping 返回 IP 地址。 我目前有这个功能
def ping(host):
"""
Returns True if host responds to a ping request
"""
import subprocess, platform
# Ping parameters as function of OS
ping_str = "-n 1" if platform.system().lower()=="windows" else "-c 1"
args = "ping " + " " + ping_str + " " + host
need_sh = False if platform.system().lower()=="windows" else True
# Ping
return subprocess.call(args, shell=need_sh) == 0
现在它只返回真或假,但有没有办法运行 ping(google.com) 并让它返回 216.58.217.206。 我有一个服务器和 IP 列表,我需要确保 IP 地址与 FQDN 匹配。
您可以使用套接字来获取主机的 IP。
import socket
print(socket.gethostbyname('www.example.com'))
不确定如何没有人尝试过这种方法(无论如何对于 Windows)!
使用 W32_PingStatus 的 WMI 查询
使用这个方法,我们返回一个充满好东西的对象
import wmi
# new WMI object
c = wmi.WMI()
# here is where the ping actually is triggered
x = c.Win32_PingStatus(Address='google.com')
# how big is this thing? - 1 element
print 'length x: ' ,len(x)
#lets look at the object 'WMI Object:\n'
print x
#print out the whole returned object
# only x[0] element has values in it
print '\nPrint Whole Object - can directly reference the field names:\n'
for i in x:
print i
#just a single field in the object - Method 1
print 'Method 1 ( i is actually x[0] ) :'
for i in x:
print 'Response:\t', i.ResponseTime, 'ms'
print 'TTL:\t', i.TimeToLive
#or better yet directly access the field you want
print '\npinged ', x[0].ProtocolAddress, ' and got reply in ', x[0].ResponseTime, 'ms'
输出截图:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.