def update(self, data): """ Callback function used by Publisher to notify this Subscriber about an update. Stores topic based information into dictionary passed to constructor. """ data_id = data[self.unique_key] if self.topic == 'IPv4': cidr = IPNetwork(cidr_abbrev_to_verbose(data_id)) self.dct[cidr] = data elif self.topic == 'IPv6': cidr = IPNetwork(cidr_abbrev_to_verbose(data_id)) self.dct[cidr] = data elif self.topic == 'multicast': iprange = None if '-' in data_id: # See if we can manage a single CIDR. (first, last) = data_id.split('-') iprange = IPRange(first, last) cidrs = iprange.cidrs() if len(cidrs) == 1: iprange = cidrs[0] else: iprange = IPAddress(data_id) self.dct[iprange] = data
def glob_to_iprange(ipglob): """ A function that accepts a glob-style IP range and returns the equivalent IP range. :param ipglob: an IP address range in a glob-style format. :return: an IPRange object. """ if not valid_glob(ipglob): raise AddrFormatError('not a recognised IP glob range: %r!' % ipglob) start_tokens = [] end_tokens = [] for octet in ipglob.split('.'): if '-' in octet: tokens = octet.split('-') start_tokens.append(tokens[0]) end_tokens.append(tokens[1]) elif octet == '*': start_tokens.append('0') end_tokens.append('255') else: start_tokens.append(octet) end_tokens.append(octet) return IPRange('.'.join(start_tokens), '.'.join(end_tokens))
def iter_ipranges(self): """Generate the merged IPRanges for this IPSet. In contrast to self.iprange(), this will work even when the IPSet is not contiguous. Adjacent IPRanges will be merged together, so you get the minimal number of IPRanges. """ sorted_ranges = [(cidr._module.version, cidr.first, cidr.last) for cidr in self.iter_cidrs()] for start, stop in _iter_merged_ranges(sorted_ranges): yield IPRange(start, stop)
def scan_range(ip_start, ip_finish): '''scan_range(ip_start, ip_finish) - function for multithread scanning the ip-range for cve-2020-3452''' ip_list = [] for ip in IPRange(ip_start, ip_finish): ip_list.append(str(ip)) try: ex = ThreadPoolExecutor(max_workers=int(args.threads)) ex.map(check_vuln, ip_list) ex.shutdown(wait=True) except: print('{}Error: Problems with threads.{} Reason: {}'.format( colorama.Fore.RED, colorama.Fore.WHITE, sys.exc_info()[0]))
def iprange(self): """ Generates an IPRange for this IPSet, if all its members form a single contiguous sequence. Raises ``ValueError`` if the set is not contiguous. :return: An ``IPRange`` for all IPs in the IPSet. """ if self.iscontiguous(): cidrs = self.iter_cidrs() if not cidrs: return None return IPRange(cidrs[0][0], cidrs[-1][-1]) else: raise ValueError("IPSet is not contiguous")