Skip to main content

pingparsing is a CLI-tool/Python-library for parsing ping command output.

Project description

Home-page: https://github.com/thombashi/pingparsing
Author: Tsuyoshi Hombashi
Author-email: tsuyoshi.hombashi@gmail.com
License: MIT License
Description-Content-Type: UNKNOWN
Description:
pingparsing
=============
.. image:: https://badge.fury.io/py/pingparsing.svg
:target: https://badge.fury.io/py/pingparsing

.. image:: https://img.shields.io/travis/thombashi/pingparsing/master.svg?label=Linux
:target: https://travis-ci.org/thombashi/pingparsing

.. image:: https://img.shields.io/appveyor/ci/thombashi/pingparsing/master.svg?label=Windows
:target: https://ci.appveyor.com/project/thombashi/pingparsing

.. image:: https://img.shields.io/github/stars/thombashi/pingparsing.svg?style=social&label=Star
:target: https://github.com/thombashi/pingparsing

.. contents:: Table of Contents
:depth: 2

Summary
---------
pingparsing is a CLI-tool/Python-library for parsing ping command output.

CLI Usage
====================
CLI included in the ``pingparsing`` packaged. The ``pingparsing`` command could do the followings:

- Execute ping and parse the result
- Parse ping result file(s)
- Parse from the standard input

Execute ping and parse the result
--------------------------------------------
If you specify destination(s) to the ``pingparsing`` command as positional arguments,
the command executes ping for each destination(s) and parses the result.
The parsed result output with JSON format.

.. code-block:: console

$ pingparsing google.com
{
"google.com": {
"destination": "google.com",
"packet_transmit": 10,
"packet_receive": 10,
"packet_loss_rate": 0.0,
"packet_loss_count": 0,
"rtt_min": 34.189,
"rtt_avg": 46.054,
"rtt_max": 63.246,
"rtt_mdev": 9.122,
"packet_duplicate_rate": 0.0,
"packet_duplicate_count": 0
}
}

.. code-block:: console

$ pingparsing google.com twitter.com
{
"google.com": {
"destination": "google.com",
"packet_transmit": 10,
"packet_receive": 10,
"packet_loss_rate": 0.0,
"packet_loss_count": 0,
"rtt_min": 37.341,
"rtt_avg": 44.538,
"rtt_max": 53.997,
"rtt_mdev": 5.827,
"packet_duplicate_rate": 0.0,
"packet_duplicate_count": 0
},
"twitter.com": {
"destination": "twitter.com",
"packet_transmit": 10,
"packet_receive": 10,
"packet_loss_rate": 0.0,
"packet_loss_count": 0,
"rtt_min": 45.377,
"rtt_avg": 68.819,
"rtt_max": 78.581,
"rtt_mdev": 9.769,
"packet_duplicate_rate": 0.0,
"packet_duplicate_count": 0
}
}


Parse ping result file
--------------------------------------------
:Input:
.. code-block:: console

$ cat ping.txt
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

--- 192.168.0.1 ping statistics ---
1688 packets transmitted, 1553 received, +1 duplicates, 7% packet loss, time 2987ms
rtt min/avg/max/mdev = 0.282/0.642/11.699/0.699 ms, pipe 2, ipg/ewma 1.770/0.782 ms
$ cat osx.txt
PING google.com (172.217.6.238): 56 data bytes
64 bytes from 172.217.6.238: icmp_seq=0 ttl=53 time=20.482 ms
64 bytes from 172.217.6.238: icmp_seq=1 ttl=53 time=32.550 ms
64 bytes from 172.217.6.238: icmp_seq=2 ttl=53 time=32.013 ms
64 bytes from 172.217.6.238: icmp_seq=3 ttl=53 time=28.498 ms
64 bytes from 172.217.6.238: icmp_seq=4 ttl=53 time=46.093 ms

--- google.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 20.482/31.927/46.093/8.292 ms

:Output:
.. code-block:: console

$ pingparsing ping.txt osx.txt
{
"osx.txt": {
"destination": "google.com",
"packet_transmit": 5,
"packet_receive": 5,
"packet_loss_rate": 0.0,
"packet_loss_count": 0,
"rtt_min": 20.482,
"rtt_avg": 31.927,
"rtt_max": 46.093,
"rtt_mdev": 8.292,
"packet_duplicate_rate": null,
"packet_duplicate_count": null
},
"ping.txt": {
"destination": "192.168.0.1",
"packet_transmit": 1688,
"packet_receive": 1553,
"packet_loss_rate": 7.997630331753558,
"packet_loss_count": 135,
"rtt_min": 0.282,
"rtt_avg": 0.642,
"rtt_max": 11.699,
"rtt_mdev": 0.699,
"packet_duplicate_rate": 0.0643915003219575,
"packet_duplicate_count": 1
}
}


Parse from the standard input
--------------------------------------------
.. code-block:: console

$ ping -f -w 10 192.168.2.100 | pingparsing
{
"destination": "192.168.2.100",
"packet_transmit": 1302,
"packet_receive": 1156,
"packet_loss_rate": 11.213517665130567,
"packet_loss_count": 146,
"rtt_min": 0.142,
"rtt_avg": 44.569,
"rtt_max": 314.637,
"rtt_mdev": 60.714,
"packet_duplicate_rate": 5.190311418685121,
"packet_duplicate_count": 60
}

Library Usage
====================

Execute ping and parse the result
--------------------------------------------
``PingTransmitter`` class can execute ``ping`` command and obtain the
ping output as a string.

:Sample Code:
.. code-block:: python

import json
import pingparsing

ping_parser = pingparsing.PingParsing()
transmitter = pingparsing.PingTransmitter()
transmitter.destination_host = "google.com"
transmitter.count = 10
result = transmitter.ping()
ping_parser.parse(result)
print(json.dumps(ping_parser.as_dict(), indent=4))

:Output:
.. code-block:: json

{
"destination": "google.com",
"packet_transmit": 10,
"packet_receive": 10,
"packet_loss_rate": 0.0,
"packet_loss_count": 0,
"rtt_min": 34.458,
"rtt_avg": 51.062,
"rtt_max": 62.943,
"rtt_mdev": 8.678,
"packet_duplicate_rate": 0.0,
"packet_duplicate_count": 0
}


Parsing ``ping`` command output
-------------------------------
:Sample Code:
.. code-block:: python

import json
import pingparsing

parser = pingparsing.PingParsing()
parser.parse("""PING google.com (216.58.196.238) 56(84) bytes of data.

--- google.com ping statistics ---
60 packets transmitted, 60 received, 0% packet loss, time 59153ms
rtt min/avg/max/mdev = 61.425/99.731/212.597/27.566 ms
""")
print(json.dumps(parser.as_dict(), indent=4))

:Output:
.. code-block:: json

{
"destination": "google.com",
"packet_transmit": 60,
"packet_receive": 60,
"packet_loss_rate": 0.0,
"packet_loss_count": 0,
"rtt_min": 61.425,
"rtt_avg": 99.731,
"rtt_max": 212.597,
"rtt_mdev": 27.566,
"packet_duplicate_rate": 0.0,
"packet_duplicate_count": 0
}

Recommended ping command execution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following methods are recommended to execute ``ping`` command to get the output for parsing.
These commands include an operation that changes the locale setting to English temporarily.

Linux
^^^^^
.. code:: console

LC_ALL=C ping <host or IP address> -w <seconds> [option] > <output.file>

Windows
^^^^^^^
.. code:: console

> chcp
Active code page: <XXX> # get current code page

> chcp 437 # change code page to english
> ping <host or IP address> -n <ping count> > <output.file>
> chcp <XXX> # restore code page

- Reference
- https://technet.microsoft.com/en-us/library/cc733037

Installation
============
::

pip install pingparsing


Dependencies
============
Python 2.7+ or 3.4+

- `logbook <http://logbook.readthedocs.io/en/stable/>`__
- `pyparsing <https://pyparsing.wikispaces.com/>`__
- `six <https://pypi.python.org/pypi/six/>`__
- `typepy <https://github.com/thombashi/typepy>`__

Test dependencies
-----------------
- `pytest <https://pypi.python.org/pypi/pytest>`__
- `pytest-runner <https://pypi.python.org/pypi/pytest-runner>`__
- `tox <https://pypi.python.org/pypi/tox>`__


Tested Environment
==================

+--------------+-----------------------------------+
| OS | ping version |
+==============+===================================+
| Debian 8.6 | ``iputils-ping 20121221-5+b2`` |
+--------------+-----------------------------------+
| Fedora 25 | ``iputils-20161105-1.fc25.x86_64``|
+--------------+-----------------------------------+
| Windows 10 | ``-`` |
+--------------+-----------------------------------+

Supported Environment
============================
- Linux
- macOS
- Windows

Premise
=======
``pingparsing`` expects the locale at the ping command execution environment with English.
Parsing the ``ping`` command output with any other locale may fail.
This is because the output of the ``ping`` command will change depending on the locale setting.


Documentation
===============
http://pingparsing.rtfd.io/

Keywords: cli-app,network,ping,parser,transmitter
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Networking

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pingparsing-0.12.0.tar.gz (19.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pingparsing-0.12.0-py2.py3-none-any.whl (19.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pingparsing-0.12.0.tar.gz.

File metadata

  • Download URL: pingparsing-0.12.0.tar.gz
  • Upload date:
  • Size: 19.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pingparsing-0.12.0.tar.gz
Algorithm Hash digest
SHA256 1d8bb6d3a70df58a445f56164d69ecf1f69186df80f18f22529ac284117a3e10
MD5 0092863a98ac46b7b9b6de073d4bf8e6
BLAKE2b-256 5ece72a5dc4e25a4f7868064bafd5ff084233e21e3833c28da5d49affce4d69b

See more details on using hashes here.

File details

Details for the file pingparsing-0.12.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pingparsing-0.12.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c8c8ff7b983a7d49acd6524fa456723eb448c7ae9dd19a792d858eea900d6e37
MD5 03f70095bd9f9a927a489ac1d1298171
BLAKE2b-256 10564df09a11ef978d6396d57588817802509b48094423f4ba884ea41e5724fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page