Files
2024-08-23 12:30:26 +03:00

60 lines
2.3 KiB
Python

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.")