aio_ping 0.1.3
An async python ICMP ping implementation using raw sockets.
Keywords: asyncio ping icmp network latency

--------
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
----------------

* `Matthew Dixon Cowles <ftp://ftp.visi.com/users/mdc/ping.py>`_

* copyleft 1989-2016 by the python-ping team, see `AUTHORS <https://github.com/l4m3rx/python-ping/blob/master/AUTHORS>`_ for more details.

* license: GNU GPL v2, see `LICENSE <https://github.com/l4m3rx/python-ping/blob/master/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 <http://help.github.com/fork-a-repo/>`_ on `GitHub <https://github.com/M-o-a-T/aioping/>`_ and `send pull requests <http://help.github.com/send-pull-requests/>`_. Thank you.

----------------
Revision history
----------------

`Revision history <https://github.com/M-o-a-T/aioping/commits/master>`_

-----
Links
-----

+----------------------+---------------------------------------+
| Sourcecode at GitHub | `https://github.com/M-o-a-T/aioping`_ |
+----------------------+---------------------------------------+

.. _https://github.com/M-o-a-T/aioping: https://github.com/M-o-a-T/aioping