import requests import dns.resolver from urllib.parse import urlparse artifactory_url = 'https://art.lmru.tech/artifactory/api/repositories' headers = { 'Content-Type': 'application/json' } def get_remote_repositories(): response = requests.get(artifactory_url, headers=headers) if response.status_code == 200: repositories = response.json() excluded_package_types = ['yum', 'deb', 'rpm', 'apt', 'alpine'] remote_repositories = [ repo for repo in repositories if repo['type'] == 'REMOTE' and repo.get('packageType', '').lower() not in excluded_package_types ] return remote_repositories else: print("Error retrieving repository list:", response.status_code, response.text) return [] remote_repositories = get_remote_repositories() def extract_hostname(url): parsed_url = urlparse(url) return parsed_url.hostname def get_ip_addresses(hostname, iterations=20): ip_addresses = set() for _ in range(iterations): try: answers = dns.resolver.resolve(hostname, 'A') for rdata in answers: ip_addresses.add((hostname, rdata.to_text())) except dns.resolver.NoAnswer: print(f"No A records found for {hostname}") except dns.resolver.NXDOMAIN: print(f"Domain {hostname} does not exist") except dns.exception.Timeout: print(f"Timeout while resolving {hostname}") except Exception as e: print(f"An error occurred while resolving {hostname}: {e}") return ip_addresses # Получаем уникальные пары (hostname, IP-адрес) для каждого хоста hostnames = {extract_hostname(repo['url']) for repo in remote_repositories} hostnames.add('docker.io') # Добавляем docker.io к списку хостнеймов hostname_ip_pairs = set() for hostname in hostnames: hostname_ip_pairs.update(get_ip_addresses(hostname)) # Сохранение уникальных IP-адресов и их хостнеймов в файл with open('blocked_ips.txt', 'w') as file: for hostname, ip in sorted(hostname_ip_pairs, key=lambda x: x[1]): file.write(f"{ip} {hostname}\n") print("Blocked IP addresses list with hostnames successfully created.")