简体   繁体   English

如何在 Python 中从 ping 中获取 IP 地址

[英]How to Grab IP address from ping in Python

I am currently using python 2.7 and will need to ping windows and linux.我目前使用的是 python 2.7,需要 ping windows 和 linux。

I want to create a function that will return the IP address from a ping within a python script.我想创建一个函数,该函数将从 python 脚本中的 ping 返回 IP 地址。 I currently have this function我目前有这个功能

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

Right now it just returns true or false but is there a way I can run ping(google.com) and have it return 216.58.217.206.现在它只返回真或假,但有没有办法运行 ping(google.com) 并让它返回 216.58.217.206。 I have a list of servers and IPs and I need to make sure that the IP addresses match the FQDN.我有一个服务器和 IP 列表,我需要确保 IP 地址与 FQDN 匹配。

You can use the socket to get the IP of the host.您可以使用套接字来获取主机的 IP。

import socket
print(socket.gethostbyname('www.example.com'))

Not sure how no-one has tried this method yet (for windows anyways)!不确定如何没有人尝试过这种方法(无论如何对于 Windows)!

Use a WMI query of W32_PingStatus使用 W32_PingStatus 的 WMI 查询

With this method we return an object full of goodies使用这个方法,我们返回一个充满好东西的对象

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'

Screenshot of output:输出截图:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM