У меня есть фрейм данных 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-сервер, делая это.
Кто-нибудь знает лучшее решение?
Спасибо!