Gufo Ping Example: Series of Requests¶
Lets send the sequence of the ICMP echo requests and get the replies.
The code is straightforward:
asyncio.run() to run asynchronous code, so lets import the
sys module to parse the CLI argument.
sys.argv only for demonstration purposes. Use
argsparse or alternatives
in real-world applications.
Ping object holds all necessary API, so import it from
Asynchronous code must be executed in the asynchronous functions, or coroutines.
So we define our function as
async. We expect an address to ping as the
First we need to create
Ping constructor offers a lots
of configuration variables for fine-tuning. Refer to the
for further details. Defaults are good enough for our tutorial, so
we ommited them.
Ping.iter_rtt() returns the asynchronous iterator, yielding for each attempt the:
- In case of success: Round-trip-time (RTT), as float, measured in seconds.
- In case of failure:
The only mandatory parameter is IP address. Gufo Ping detects IPv4/IPv6 usage, so all we need is to pass an address. Function may accept the additional parameters for fine-tuning, Refer to the Ping.ping reference for details.
Ping.iter_rtt() is the asynchronous iterator and should be
used along with
async for construction.
Lets print the result of each iteration.
To run our example from command line we need to check
Lets run our asyncronous
main() function via
and pass first command-line parameter as address.
Lets check the success case. Run example as:
Ok, we got a measured RTT.
Lets check the faulty cause. RFC-5737 defines the special range of addresses - 192.0.2.0/24, which can be used as unresponsible addresses. So, lets ping a 192.0.2.1:
After second or so of awaiting we finally got a
None, which means our
request is timed out.