使用python快速查找大量IP地址的所有主机名

时间:2018-09-07 14:11:19

标签: python dns python-multiprocessing

我有一个带有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服务器。

有人知道更好的解决方案吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用多个DNS服务器查询请求。但是说一分钟内有10个DNS服务器查询的25k个请求的数量还不足以将其视为DOS攻击。