diff options
Diffstat (limited to 'scripts/external_libs/scapy-2.3.1/scapy/pton_ntop.py')
-rw-r--r-- | scripts/external_libs/scapy-2.3.1/scapy/pton_ntop.py | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/scripts/external_libs/scapy-2.3.1/scapy/pton_ntop.py b/scripts/external_libs/scapy-2.3.1/scapy/pton_ntop.py deleted file mode 100644 index 1bd88920..00000000 --- a/scripts/external_libs/scapy-2.3.1/scapy/pton_ntop.py +++ /dev/null @@ -1,89 +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""" - 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 = "*" - while "::" in addr: - addr = addr.replace("::", ":" + JOKER + ":") - joker_pos = None - - # The last part of an IPv6 address can be an IPv4 address - ipv4_addr = None - if "." in addr: - ipv4_addr = addr.split(":")[-1] - - result = "" - parts = addr.split(":") - 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, "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] + "\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 = ":".join(parts) - while ":::" in result: - result = result.replace(":::", "::") - # Leaving out leading and trailing zeros is only allowed with :: - if result.endswith(":") and not result.endswith("::"): - result = result + "0" - if result.startswith(":") and not result.startswith("::"): - result = "0" + result - return result - else: - raise Exception("Address family not supported yet") |