diff options
author | 2016-03-21 16:03:47 +0200 | |
---|---|---|
committer | 2016-03-21 16:03:47 +0200 | |
commit | b89efa188810bf95a9d245e69e2961b5721c3b0f (patch) | |
tree | 454273ac6c4ae972ebb8a2c86b893296970b4fa9 /scripts/external_libs/scapy-python3-0.18/scapy/pton_ntop.py | |
parent | f72c6df9d2e9998ae1f3529d729ab7930b35785a (diff) |
scapy python 2/3
Diffstat (limited to 'scripts/external_libs/scapy-python3-0.18/scapy/pton_ntop.py')
-rw-r--r-- | scripts/external_libs/scapy-python3-0.18/scapy/pton_ntop.py | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/scripts/external_libs/scapy-python3-0.18/scapy/pton_ntop.py b/scripts/external_libs/scapy-python3-0.18/scapy/pton_ntop.py deleted file mode 100644 index 1629edee..00000000 --- a/scripts/external_libs/scapy-python3-0.18/scapy/pton_ntop.py +++ /dev/null @@ -1,90 +0,0 @@ -## This file is part of Scapy -## See http://www.secdev.org/projects/scapy for more informations -## Copyright (C) Philippe Biondi <phil@secdev.org> -## This program is published under a GPLv2 license - -""" -Convert IPv6 addresses between textual representation and binary. - -These functions are missing when python is compiled -without IPv6 support, on Windows for instance. -""" - -import socket,struct - -def inet_pton(af, addr): - """Convert an IP address from text representation into binary form""" - print('hello') - if af == socket.AF_INET: - return inet_aton(addr) - elif af == socket.AF_INET6: - # IPv6: The use of "::" indicates one or more groups of 16 bits of zeros. - # We deal with this form of wildcard using a special marker. - JOKER = b"*" - while b"::" in addr: - addr = addr.replace(b"::", b":" + JOKER + b":") - joker_pos = None - - # The last part of an IPv6 address can be an IPv4 address - ipv4_addr = None - if b"." in addr: - ipv4_addr = addr.split(b":")[-1] - - result = b"" - parts = addr.split(b":") - for part in parts: - if part == JOKER: - # Wildcard is only allowed once - if joker_pos is None: - joker_pos = len(result) - else: - raise Exception("Illegal syntax for IP address") - elif part == ipv4_addr: # FIXME: Make sure IPv4 can only be last part - # FIXME: inet_aton allows IPv4 addresses with less than 4 octets - result += socket.inet_aton(ipv4_addr) - else: - # Each part must be 16bit. Add missing zeroes before decoding. - try: - result += part.rjust(4, b"0").decode("hex") - except TypeError: - raise Exception("Illegal syntax for IP address") - - # If there's a wildcard, fill up with zeros to reach 128bit (16 bytes) - if JOKER in addr: - result = (result[:joker_pos] + b"\x00" * (16 - len(result)) - + result[joker_pos:]) - - if len(result) != 16: - raise Exception("Illegal syntax for IP address") - return result - else: - raise Exception("Address family not supported") - - -def inet_ntop(af, addr): - """Convert an IP address from binary form into text represenation""" - if af == socket.AF_INET: - return inet_ntoa(addr) - elif af == socket.AF_INET6: - # IPv6 addresses have 128bits (16 bytes) - if len(addr) != 16: - raise Exception("Illegal syntax for IP address") - parts = [] - for left in [0, 2, 4, 6, 8, 10, 12, 14]: - try: - value = struct.unpack("!H", addr[left:left+2])[0] - hexstr = hex(value)[2:] - except TypeError: - raise Exception("Illegal syntax for IP address") - parts.append(hexstr.lstrip("0").lower()) - result = b":".join(parts) - while b":::" in result: - result = result.replace(b":::", b"::") - # Leaving out leading and trailing zeros is only allowed with :: - if result.endswith(b":") and not result.endswith(b"::"): - result = result + b"0" - if result.startswith(b":") and not result.startswith(b"::"): - result = b"0" + result - return result - else: - raise Exception("Address family not supported yet") |