我是Python新手。我正在尝试在程序中使用 dns.resolver 模块,在其中传递域列表并使用线程池运行它们,该线程池异步读取文件的内容,然后从文件中打印每个域的结果。
下面是代码:
import dns.resolver
from multiprocessing.pool import ThreadPool as Pool
pool_size =4
pool = Pool(pool_size)
dnsResolver = dns.resolver.Resolver()
dnsResolver.timeout = 1
dnsResolver.lifetime = 1
dnsResolver.nameservers = ['172.31.0.2']
#domain_list = ['google.com','facebook.com', 'amazon.com']
#for domain in domain_list:
# Query results for the dig operations from a file that contains less than 1024 domains in it
def fetch_dig_no_blast_results(no_blast_domains):
try:
no_blast_domains = no_blast_domains.strip()
dnsAnswer = dnsResolver.query(no_blast_domains)
for rdata in dnsAnswer:
print (no_blast_domains, "resolved to",str(rdata))
except dns.resolver.NXDOMAIN:
print ("No records exists for", no_blast_domains)
except dns.resolver.Timeout:
print ("Timeout in querying",no_blast_domains)
with open("no-blast-domains.txt",'r') as fd1:
for no_blast_domains in fd1:
pool.apply_async(fetch_dig_no_blast_results, (no_blast_domains,))
pool.close()
pool.join()
我有两个问题。
- 我需要在同一行中打印特定域的 dns 查询的所有结果。例如,域名“amazon.com”的 DNS 查询给出三个 IP。我需要在同一行中打印这三个 ip -
我正在查看的输出示例如下:
['amazon.com' resolved to 'ip1', 'ip2', 'ip3']
当前代码将它们打印为三行
['amazon.com' resolved to 'ip1']
['amazon.com' resolved to 'ip2']
['amazon.com' resolved to 'ip3']
- 我想确保每个线程查询不同的域,并且没有线程查询相同的域。
任何建议都会对我有很大帮助。
最佳答案
在示例中替换这两行代码:
for rdata in dnsAnswer:
print (no_blast_domains, "resolved to",str(rdata))
与(如果列表中有整数/数字):
print(no_blast_domains, "resolved to", ",".join(str(x) for x in rdata))
with(如果有,则列表中只有字符串):
print(no_blast_domains, "resolved to", ",".join(rdata))
关于Python dns 解析器在同一行中打印域的所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47986934/