Быстро найти все имена хостов для большого списка IP-адресов с Python - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть фрейм данных pandas со столбцом IP-адресов, содержащим ~ 25k внутренних IP-адресов. Я пытаюсь найти гораздо более быстрый способ заполнить пропущенные имена хостов в столбце DNS-имен. вот с чем я сейчас работаю:

import pandas as pd
import os, sys


def get_DNS_name(IP):
    import socket
    name = socket.gethostbyaddr(IP)
    return name[0]
data_p = 'IT-inventory.csv'
inv = pd.read_csv(data_p.replace('~$',''))
DNSnames = []
IPIloc = inv.columns.get_loc("IP Address")
dnsIloc = inv.columns.get_loc('DNS Name')
for index, row in inv.iterrows():
    IP= str(row[IPIloc])
    print(IP)
    DNSname = str(row[dnsIloc])
    if DNSname is not None:
        try:
            DNSname = get_DNS_name(IP)
        except:
            pass
    DNSnames.append(DNSname)  
inv['DNS Name'] = DNSnames
inv

Суть этой проблемы в том, что gethostbyaddr занимает несколько секунд на запрос, поэтому я рассмотрел попытку выгрузить все записи с DNS-сервера на локальный компьютер и затем выполнить слияние, но не смог найти способ выполнить тот. Я также рассмотрел возможность реализации многопроцессорной обработки, чтобы попытаться увеличить количество параллельных запросов, но не знаю, поможет ли это вообще. Также обеспокоен тем, что я мог случайно DOS атаковать DNS-сервер, делая это.

Кто-нибудь знает лучшее решение? Спасибо!

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете использовать несколько DNS-серверов для запроса ваших запросов. Но 25 тыс. Запросов, запрошенных, скажем, на 10 DNS-серверах за 1 минуту, недостаточно для того, чтобы считать это атакой DOS.

...