Skip to content

Instantly share code, notes, and snippets.

@Kylmakalle
Last active January 16, 2020 16:56
Show Gist options
  • Save Kylmakalle/f8b1198deee20d907ae070fd99905396 to your computer and use it in GitHub Desktop.
Save Kylmakalle/f8b1198deee20d907ae070fd99905396 to your computer and use it in GitHub Desktop.
Получить IP адреса по Домену / Get ip address by domain
import socket
from threading import Thread, Lock
# Блокировщик для правильного вывода print, потокобезопасно
s_print_lock = Lock()
def s_print(*a, **b):
"""Потокобезопасная функция print"""
with s_print_lock:
print(*a, **b)
# Блокировщик доступа к файлам
file_locker = Lock()
def read_file_in_thread(filename):
with file_locker:
with open(filename, 'r') as file:
data = file.readlines()
return data
RESULTS = {}
# Функция вывода IP по домену
def get_host(domain):
result = None
try:
result = socket.gethostbyname(domain)
s_print(result)
except socket.gaierror:
# Не удается получить IP
s_print("Can't get IP", domain)
RESULTS[domain] = result
if __name__ == '__main__':
# Парсим домены
with open('domains.txt', 'r') as f:
domains_list = f.readlines()
# Создаем потоки и кладем их в список
threads = []
print('Found {} domains'.format(len(domains_list)))
for d in domains_list:
# Инициализируем поток для каждого домена
# strip() необходимо чтобы убрать `\n` и пробелы из доменов
thread = Thread(target=get_host, args=(d.strip(),))
# Старт потока
thread.start()
# Добавляем поток в список, чтобы потом его завершить
threads.append(thread)
# Дожидаемся полного выполнения всех потоков перед завершением
for thread in threads:
thread.join()
print('Got {} results'.format(RESULTS))
from pprint import pprint
pprint(RESULTS)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment