def ignore(self, addr): '''Read self.IGNORE_FILE to check if addr (an IP) is in it. The file should consist of blank-separated addresses or address ranges in CIDR format to ignore.''' bits = inet_pton(valid_addr(addr), addr) try: with open(self.IGNORE_FILE) as ignore: for line in ignore: # comments if line.lstrip().startswith('#'): continue for word in line.split(): try: # is this CIDR? iaddr, mask = word.split('/', 1) mask = int(mask) except ValueError: try: # exact match only if bits == inet_pton(valid_addr(word), word): return True except EnvironmentError as err: # inet_pton failed self.log(LOG_PRINT, 'ignore.txt token', word, 'could not be parsed:', err) continue try: ibits = inet_pton(valid_addr(iaddr), iaddr) except EnvironmentError: continue for byte, ibyte in zip(bits, ibits): if not mask: return True elif mask >= 8: if byte != ibyte: return False mask -= 8 else: b, i = ord(byte), ord(ibyte) m = 0xff00 >> mask return b & m == i & m except IOError as err: if err.errno != ENOENT: raise
def gsr_formataddr(addr): sep = '\\' if addr.family == AF_INET else '/' host = inet_pton(addr.family, addr.host) port = chr(addr.port >> 8) + chr(addr.port & 0xff) return sep + host + port