An asyncio-based python ping implementation using raw sockets.
- Compatible with Python 3.5 ff.
- Note that ICMP messages can only be sent from processes running as root (in Windows, you must run this script as 'Administrator').
- Matthew Dixon Cowles
- copyleft 1989-2016 by the python-ping team, see AUTHORS for more details.
- license: GNU GPL v2, see LICENSE for more details.
usage: ping [-h] [-w TIMEOUT] [-c COUNT] [-i INTERVAL] [-4] [-6]
[-I SOURCEINTF] [-s NUMDATABYTES] [-T] [-S SOURCEIP]
hostname
A pure python implementation of the ping protocol. *REQUIRES ROOT*
positional arguments:
hostname The address to attempt to ping.
optional arguments:
-h, --help show this help message and exit
-w TIMEOUT, --deadline TIMEOUT
The maximum amount of time to wait until ping times
out.
-c COUNT, --request_count COUNT
The number of attempts to make. Zero=infinite.
-i INTERVAL, --interval INTERVAL
Time between ping attempts
-4, --ipv4 Flag to use IPv4.
-6, --ipv6 Flag to use IPv6.
-I SOURCEINTF, --interface SOURCEINTF
Interface to use.
-s NUMDATABYTES, --packet_size NUMDATABYTES
Designate the amount of data to send per packet.
-T, --test_case Flag to run the default test case suite.
-S SOURCEIP, --source_address SOURCEIP
Source address from which ICMP Echo packets will be
sent.# python3
>>> from aioping import ping
>>> ping('google.com', timeout=3000, count=3, delay=0.5)
True
>>> ping('google.com', timeout=3000, count=3, delay=0.5, verbose=True)
PYTHON PING google.com (216.58.212.46): 1300 data bytes
72 bytes from 216.58.212.46: icmp_seq=0 ttl=59 time=4.42 ms
72 bytes from 216.58.212.46: icmp_seq=1 ttl=59 time=4.70 ms
72 bytes from 216.58.212.46: icmp_seq=2 ttl=59 time=4.44 ms
72 bytes from 216.58.212.46: icmp_seq=3 ttl=59 time=4.47 ms
----216.58.212.46 PYTHON PING Statistics----
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip (ms) min/avg/max = 4.4/4.5/4.7
1Async usage is via the {Ping} class, which can be used like this:
from aioping import Ping,VerbosePing
async def ping(hostname, verbose=True, handle_signals=False, **kw):
"""
Send @count ping to @hostname with the given @timeout
"""
ping = (VerbosePing if verbose else Ping)(verbose=verbose, **kw)
if handle_signals: ping.add_signal_handler()
await ping.init(hostname)
res = await ping.looped()
if verbose:
ping.print_stats()
ping.close()
return resFork this repo on GitHub and send pull requests. Thank you.
| Sourcecode at GitHub | https://github.com/M-o-a-T/aioping |