我有一个带有IP地址列的pandas数据帧,其中包含约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服务器。
有人知道更好的解决方案吗? 谢谢!
答案 0 :(得分:0)
您可以使用多个DNS服务器查询请求。但是说一分钟内有10个DNS服务器查询的25k个请求的数量还不足以将其视为DOS攻击。