Last active
January 16, 2020 16:56
-
-
Save Kylmakalle/f8b1198deee20d907ae070fd99905396 to your computer and use it in GitHub Desktop.
Получить IP адреса по Домену / Get ip address by domain
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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