diff options
Diffstat (limited to 'ping-0.2/debian/python-ping')
11 files changed, 404 insertions, 0 deletions
diff --git a/ping-0.2/debian/python-ping/DEBIAN/control b/ping-0.2/debian/python-ping/DEBIAN/control new file mode 100644 index 0000000..b97ec21 --- /dev/null +++ b/ping-0.2/debian/python-ping/DEBIAN/control @@ -0,0 +1,20 @@ +Package: python-ping +Version: 0.2-1 +Architecture: all +Maintainer: Kristina Clair <kclair@leap.se> +Installed-Size: 76 +Depends: python, python-support (>= 0.90.0) +Provides: python2.5-ping, python2.6-ping +Section: python +Priority: optional +Description: An implementation of ICMP ping in Python + This library is a fork of George Notaras' python-ping library, which is + an implementation of the standard ICMP ping in pure Python. + . + As it uses raw ICMP sockets, you need to be root to use the functions + exported by the ping module. + . + This fork by Pierre Bourdon adds a setup.py file in order to permit an + easier distribution of the package. The license of the library remains + unchanged (GPLv2), see COPYING. +Python-Version: 2.5, 2.6 diff --git a/ping-0.2/debian/python-ping/DEBIAN/md5sums b/ping-0.2/debian/python-ping/DEBIAN/md5sums new file mode 100644 index 0000000..21aca8b --- /dev/null +++ b/ping-0.2/debian/python-ping/DEBIAN/md5sums @@ -0,0 +1,7 @@ +0851268cfa5f0ed91ecddae6d42e10c4 usr/share/doc/python-ping/README +218257068617a420552b25445a495b01 usr/share/doc/python-ping/README.Debian +9de4874a2f489523a5128c8255aa2457 usr/share/doc/python-ping/changelog.Debian.gz +27543d7b5ce6a9f6319cff1d1d5a7a0b usr/share/doc/python-ping/copyright +b246e4f2dcf66e20c6353b89c3df912a usr/share/pyshared/ping-0.2.egg-info +b9da1875bfb3013c16f66ed22edaa46f usr/share/pyshared/ping.py +4f51c996bcf5086cb0de223b62a146eb usr/share/python-support/python-ping.public diff --git a/ping-0.2/debian/python-ping/DEBIAN/postinst b/ping-0.2/debian/python-ping/DEBIAN/postinst new file mode 100755 index 0000000..6aa6c16 --- /dev/null +++ b/ping-0.2/debian/python-ping/DEBIAN/postinst @@ -0,0 +1,7 @@ +#!/bin/sh +set -e +# Automatically added by dh_pysupport +if which update-python-modules >/dev/null 2>&1; then + update-python-modules python-ping.public +fi +# End automatically added section diff --git a/ping-0.2/debian/python-ping/DEBIAN/prerm b/ping-0.2/debian/python-ping/DEBIAN/prerm new file mode 100755 index 0000000..99c6b3b --- /dev/null +++ b/ping-0.2/debian/python-ping/DEBIAN/prerm @@ -0,0 +1,7 @@ +#!/bin/sh +set -e +# Automatically added by dh_pysupport +if which update-python-modules >/dev/null 2>&1; then + update-python-modules -c python-ping.public +fi +# End automatically added section diff --git a/ping-0.2/debian/python-ping/usr/share/doc/python-ping/README b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/README new file mode 100644 index 0000000..b3cccd7 --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/README @@ -0,0 +1,9 @@ +This library is a fork of George Notaras' python-ping library, which is +an implementation of the standard ICMP ping in pure Python. + +As it uses raw ICMP sockets, you need to be root to use the functions +exported by the ping module. + +This fork by Pierre Bourdon adds a setup.py file in order to permit an +easier distribution of the package. The license of the library remains +unchanged (GPLv2), see COPYING. diff --git a/ping-0.2/debian/python-ping/usr/share/doc/python-ping/README.Debian b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/README.Debian new file mode 100644 index 0000000..59e8175 --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/README.Debian @@ -0,0 +1,6 @@ +python-ping for Debian +---------------------- + +<possible notes regarding this package - if none, delete this file> + + -- Kristina Clair <kclair@leap.se> Wed, 03 Oct 2012 11:59:08 -0700 diff --git a/ping-0.2/debian/python-ping/usr/share/doc/python-ping/changelog.Debian.gz b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/changelog.Debian.gz Binary files differnew file mode 100644 index 0000000..5e6b245 --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/changelog.Debian.gz diff --git a/ping-0.2/debian/python-ping/usr/share/doc/python-ping/copyright b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/copyright new file mode 100644 index 0000000..a979dc1 --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/doc/python-ping/copyright @@ -0,0 +1,42 @@ +This work was packaged for Debian by: + + Kristina Clair <kclair@leap.se> on Wed, 03 Oct 2012 11:45:53 -0700 + +It was downloaded from: + + http://pypi.python.org/pypi/ping/ + +Upstream Author(s): + + Pierre Bourdon + Georgi Kolev + +Copyright: + + Copyright (C) Pierre Bourdon + +License: + + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/> + +On Debian systems, the complete text of the GNU General +Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". + +The Debian packaging is: + + Copyright (C) 2012 Kristina Clair <kclair@leap.se> + + you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. diff --git a/ping-0.2/debian/python-ping/usr/share/pyshared/ping-0.2.egg-info b/ping-0.2/debian/python-ping/usr/share/pyshared/ping-0.2.egg-info new file mode 100644 index 0000000..bdcd4f1 --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/pyshared/ping-0.2.egg-info @@ -0,0 +1,31 @@ +Metadata-Version: 1.0 +Name: ping +Version: 0.2 +Summary: An implementation of ICMP ping in Python +Home-page: http://bitbucket.org/delroth/python-ping/ +Author: Pierre Bourdon +Author-email: delroth@gmail.com +License: GPL2 +Download-URL: http://bitbucket.org/delroth/python-ping/downloads/python-ping-0.2.tar.gz +Description: This library is a fork of George Notaras' python-ping library, which is + an implementation of the standard ICMP ping in pure Python. + + As it uses raw ICMP sockets, you need to be root to use the functions + exported by the ping module. + + This fork by Pierre Bourdon adds a setup.py file in order to permit an + easier distribution of the package. The license of the library remains + unchanged (GPLv2), see COPYING. + +Keywords: ping icmp network latency +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: System Administrators +Classifier: License :: OSI Approved :: GNU General Public License (GPL) +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: Unix +Classifier: Programming Language :: Python :: 2 +Classifier: Topic :: Internet +Classifier: Topic :: System :: Networking +Classifier: Topic :: System :: Networking :: Monitoring diff --git a/ping-0.2/debian/python-ping/usr/share/pyshared/ping.py b/ping-0.2/debian/python-ping/usr/share/pyshared/ping.py new file mode 100644 index 0000000..8c4a4bd --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/pyshared/ping.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python + +""" + A pure python ping implementation using raw socket. + + + Note that ICMP messages can only be sent from processes running as root. + + + Derived from ping.c distributed in Linux's netkit. That code is + copyright (c) 1989 by The Regents of the University of California. + That code is in turn derived from code written by Mike Muuss of the + US Army Ballistic Research Laboratory in December, 1983 and + placed in the public domain. They have my thanks. + + Bugs are naturally mine. I'd be glad to hear about them. There are + certainly word - size dependenceies here. + + Copyright (c) Matthew Dixon Cowles, <http://www.visi.com/~mdc/>. + Distributable under the terms of the GNU General Public License + version 2. Provided with no warranties of any sort. + + Original Version from Matthew Dixon Cowles: + -> ftp://ftp.visi.com/users/mdc/ping.py + + Rewrite by Jens Diemer: + -> http://www.python-forum.de/post-69122.html#69122 + + Rewrite by George Notaras: + -> http://www.g-loaded.eu/2009/10/30/python-ping/ + + Fork by Pierre Bourdon: + -> http://bitbucket.org/delroth/python-ping/ + + Revision history + ~~~~~~~~~~~~~~~~ + + November 22, 1997 + ----------------- + Initial hack. Doesn't do much, but rather than try to guess + what features I (or others) will want in the future, I've only + put in what I need now. + + December 16, 1997 + ----------------- + For some reason, the checksum bytes are in the wrong order when + this is run under Solaris 2.X for SPARC but it works right under + Linux x86. Since I don't know just what's wrong, I'll swap the + bytes always and then do an htons(). + + December 4, 2000 + ---------------- + Changed the struct.pack() calls to pack the checksum and ID as + unsigned. My thanks to Jerome Poincheval for the fix. + + May 30, 2007 + ------------ + little rewrite by Jens Diemer: + - change socket asterisk import to a normal import + - replace time.time() with time.clock() + - delete "return None" (or change to "return" only) + - in checksum() rename "str" to "source_string" + + November 8, 2009 + ---------------- + Improved compatibility with GNU/Linux systems. + + Fixes by: + * George Notaras -- http://www.g-loaded.eu + Reported by: + * Chris Hallman -- http://cdhallman.blogspot.com + + Changes in this release: + - Re-use time.time() instead of time.clock(). The 2007 implementation + worked only under Microsoft Windows. Failed on GNU/Linux. + time.clock() behaves differently under the two OSes[1]. + + [1] http://docs.python.org/library/time.html#time.clock + + September 25, 2010 + ------------------ + Little modifications by Georgi Kolev: + - Added quiet_ping function. + - returns percent lost packages, max round trip time, avrg round trip + time + - Added packet size to verbose_ping & quiet_ping functions. + - Bump up version to 0.2 + +""" + +__version__ = "0.2" + +import os +import select +import socket +import struct +import sys +import time + +# From /usr/include/linux/icmp.h; your milage may vary. +ICMP_ECHO_REQUEST = 8 # Seems to be the same on Solaris. + + +def checksum(source_string): + """ + I'm not too confident that this is right but testing seems + to suggest that it gives the same answers as in_cksum in ping.c + """ + sum = 0 + count_to = (len(source_string) / 2) * 2 + for count in xrange(0, count_to, 2): + this = ord(source_string[count + 1]) * 256 + ord(source_string[count]) + sum = sum + this + sum = sum & 0xffffffff # Necessary? + + if count_to < len(source_string): + sum = sum + ord(source_string[len(source_string) - 1]) + sum = sum & 0xffffffff # Necessary? + + sum = (sum >> 16) + (sum & 0xffff) + sum = sum + (sum >> 16) + answer = ~sum + answer = answer & 0xffff + + # Swap bytes. Bugger me if I know why. + answer = answer >> 8 | (answer << 8 & 0xff00) + + return answer + + +def receive_one_ping(my_socket, id, timeout): + """ + Receive the ping from the socket. + """ + time_left = timeout + while True: + started_select = time.time() + what_ready = select.select([my_socket], [], [], time_left) + how_long_in_select = (time.time() - started_select) + if what_ready[0] == []: # Timeout + return + + time_received = time.time() + received_packet, addr = my_socket.recvfrom(1024) + icmpHeader = received_packet[20:28] + type, code, checksum, packet_id, sequence = struct.unpack( + "bbHHh", icmpHeader + ) + if packet_id == id: + bytes = struct.calcsize("d") + time_sent = struct.unpack("d", received_packet[28:28 + bytes])[0] + return time_received - time_sent + + time_left = time_left - how_long_in_select + if time_left <= 0: + return + + +def send_one_ping(my_socket, dest_addr, id, psize): + """ + Send one ping to the given >dest_addr<. + """ + dest_addr = socket.gethostbyname(dest_addr) + + # Remove header size from packet size + psize = psize - 8 + + # Header is type (8), code (8), checksum (16), id (16), sequence (16) + my_checksum = 0 + + # Make a dummy heder with a 0 checksum. + header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, 0, my_checksum, id, 1) + bytes = struct.calcsize("d") + data = (psize - bytes) * "Q" + data = struct.pack("d", time.time()) + data + + # Calculate the checksum on the data and the dummy header. + my_checksum = checksum(header + data) + + # Now that we have the right checksum, we put that in. It's just easier + # to make up a new header than to stuff it into the dummy. + header = struct.pack( + "bbHHh", ICMP_ECHO_REQUEST, 0, socket.htons(my_checksum), id, 1 + ) + packet = header + data + my_socket.sendto(packet, (dest_addr, 1)) # Don't know about the 1 + + +def do_one(dest_addr, timeout, psize): + """ + Returns either the delay (in seconds) or none on timeout. + """ + icmp = socket.getprotobyname("icmp") + try: + my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp) + except socket.error, (errno, msg): + if errno == 1: + # Operation not permitted + msg = msg + ( + " - Note that ICMP messages can only be sent from processes" + " running as root." + ) + raise socket.error(msg) + raise # raise the original error + + my_id = os.getpid() & 0xFFFF + + send_one_ping(my_socket, dest_addr, my_id, psize) + delay = receive_one_ping(my_socket, my_id, timeout) + + my_socket.close() + return delay + + +def verbose_ping(dest_addr, timeout = 2, count = 4, psize = 64): + """ + Send `count' ping with `psize' size to `dest_addr' with + the given `timeout' and display the result. + """ + for i in xrange(count): + print "ping %s with ..." % dest_addr, + try: + delay = do_one(dest_addr, timeout, psize) + except socket.gaierror, e: + print "failed. (socket error: '%s')" % e[1] + break + + if delay == None: + print "failed. (timeout within %ssec.)" % timeout + else: + delay = delay * 1000 + print "get ping in %0.4fms" % delay + print + + +def quiet_ping(dest_addr, timeout = 2, count = 4, psize = 64): + """ + Send `count' ping with `psize' size to `dest_addr' with + the given `timeout' and display the result. + Returns `percent' lost packages, `max' round trip time + and `avrg' round trip time. + """ + mrtt = None + artt = None + lost = 0 + plist = [] + + for i in xrange(count): + try: + delay = do_one(dest_addr, timeout, psize) + except socket.gaierror, e: + print "failed. (socket error: '%s')" % e[1] + break + + if delay != None: + delay = delay * 1000 + plist.append(delay) + + # Find lost package percent + percent_lost = 100 - (len(plist) * 100 / count) + + # Find max and avg round trip time + if plist: + mrtt = max(plist) + artt = sum(plist) / len(plist) + + return percent_lost, mrtt, artt + +if __name__ == '__main__': + verbose_ping("heise.de") + verbose_ping("google.com") + verbose_ping("a-test-url-taht-is-not-available.com") + verbose_ping("192.168.1.1") diff --git a/ping-0.2/debian/python-ping/usr/share/python-support/python-ping.public b/ping-0.2/debian/python-ping/usr/share/python-support/python-ping.public new file mode 100644 index 0000000..fe3edd6 --- /dev/null +++ b/ping-0.2/debian/python-ping/usr/share/python-support/python-ping.public @@ -0,0 +1,2 @@ +/usr/share/pyshared/ping-0.2.egg-info +/usr/share/pyshared/ping.py |