An async python ICMP ping implementation using raw sockets.
Project description
aio_ping
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’).
Original Version
copyleft 1989-2016 by the python-ping team, see AUTHORS for more details.
license: GNU GPL v2, see LICENSE for more details.
Usage
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.
Using as lib
# python3
>>> from aio_ping 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
1
Async usage is via the {Ping} class, which can be used like this:
from aio_ping 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 res
contribute
Fork this repo on GitHub and send pull requests. Thank you.
Revision history
Links
Sourcecode at GitHub |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aio_ping-0.1.3.tar.gz
(10.4 kB
view details)
File details
Details for the file aio_ping-0.1.3.tar.gz.
File metadata
- Download URL: aio_ping-0.1.3.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d84610ff2830480a8762d350172d512add01bb1fa1957ea4e8ba843b57c4bd7
|
|
| MD5 |
77f7cf12e90962dc264f30c9db0fbc48
|
|
| BLAKE2b-256 |
0b89f58d745ac40cedc1884374a38cebee746d41e6ec50279b12198bcf889ad0
|