Массовый обратный поиск

Я пытаюсь выполнить обратный поиск всех внутренних IP-адресов, чтобы проверить имеющуюся у меня инвентаризацию. Я хочу сделать это через Python. Я думаю о создании файла csv со всеми внутренними IP-адресами, используя следующий код:

import ipaddress as ip
import pandas as pd

file_name='10Dot.csv'

a = ip.ip_network('10.0.0.0/8')
ip_list = []
for x in a.hosts():
    ip_list.append(x.compressed)

df=pd.DataFrame({'IP_Address':ip_list})
df.to_csv(file_name, encoding='utf-8', index=False)

end = time.time()
print(end - start)

Точно так же я хочу сгенерировать файлы для других внутренних сетей. Затем, используя следующую функцию, я пытаюсь просмотреть каждую строку в сгенерированном файле, чтобы выполнить обратный поиск:

def reverse_lookup(host):
    try:
        lookup=socket.gethostbyaddr(str(host))[0]
    except:
        lookup="NA"
    return lookup    

Если я читаю CSV-файл построчно, он очень медленно обрабатывает все IP-адреса. Я пытаюсь использовать многопоточность, чтобы выбирать фрагменты CSV-файла и выполнять указанную выше функцию построчно. Итак, с сетью 10.0.0.0/8 у меня есть 16 777 214 строк в файле, я думаю разделить это на 100 частей и создать окончательный файл с хостом и искомым значением. Как параллельно читать CSV-файл для потоков, а затем объединять их в один файл?

Также, если у вас есть лучший подход к решению этой проблемы, пожалуйста, дайте мне знать.


person Steve_Greenwood    schedule 06.06.2018    source источник
comment
Вы могли бы легко найти его stackoverflow.com/questions/8424771/   -  person ravi    schedule 06.06.2018
comment
Будьте осторожны с пропускной способностью DNS, вы можете DOS вашего локального резолвера, если у вас слишком много параллельных потоков. Я бы посмотрел на aiodns, если вы хотите оптимизировать время настенных часов.   -  person tripleee    schedule 06.06.2018
comment
@tripleee - это хороший момент в отношении DOS, поскольку aiodns выполняет обработку асинхронно, как будет работать программа, если несколько потоков вызывают одну и ту же функцию.   -  person Steve_Greenwood    schedule 06.06.2018
comment
Вам действительно не нужны потоки, если вы используете асинхронность. Потоки могут нормально вызывать одну и ту же функцию параллельно, хотя вам нужно подумать о целостности общих структур данных между потоками. Как именно вы управляете параллелизмом, в любом случае не имеет значения для DNS.   -  person tripleee    schedule 06.06.2018
comment
В качестве эталона я не думаю, что 100 параллельных запросов будут проблемой. Мне когда-то удавалось DOS компании DNS с неконтролируемым параллелизмом (это было с многопроцессорностью, в основном просто xargs -P10000 -n 1 dig <hosts.txt) но с максом 256 было нормально, правда несколько медленно у всех по длительности задачи.   -  person tripleee    schedule 06.06.2018