def ping_host(self, ip):
"""method to send ICMP/ARP requests and receive response
from the host with @ip address.
Returns a tuple (ip/host name, ONLINE/OFFLINE, response time)"""
# form an ICMP or ARP packet
packet = self.__gen_packet(ip)
try:
# send and wait for response
answers, unanswers = self.__send_recv(packet)
except PermissionError:
raise PermissionException
if self.__resolve_names:
# resolve host name by ip if resolve_names
# flag was set
try:
host = gethostbyaddr(ip)[HOST_NAME_INDEX]
except herror:
host = ip
else:
# otherwise show ip
host = ip
if answers:
answer = answers[FIRST_INDEX]
# get the request object
req = answer[REQUEST_INDEX]
# get the response object
resp = answer[RESPONSE_INDEX]
# calculate response time and round it
delta = resp.time - req.sent_time
return host, ONLINE, delta
else:
# return unansered results
unanswer = unanswers[FIRST_INDEX]
resp = unanswer[RESPONSE_INDEX]
return host, OFFLINE, None
评论列表
文章目录