我有一个包含1亿个域名的列表,例如www.microsoft.com,并希望将该IP号码解析为www.microsoft.com
使用Python adns运行本地pdns服务器并查询localhost?
答案 0 :(得分:1)
我可能会使用Twisted DNS libray从Google's Public DNS(ip地址:8.8.8.8)进行DNS解析。它需要一些试验和错误,但我猜你可以同时至少有几百个未完成的查询。 Google的DNS基础架构旨在处理巨大的负载,Twisted非常适合处理数千个同步的异步操作。
答案 1 :(得分:0)
实际上,我最近不得不解决这个特定问题。我发现的所有公共服务器都非常有限,并且以大约 2000 qps(每秒查询数)的速度回答。 2000 qps 对于数百万个 FQDN 来说显然太低了。
我最终配置了一个递归解析器以在合理的时间内完成此操作。使用您选择的递归解析器。下面我举一个使用unbound的例子。
使用未绑定
unbound
应该是大多数现代发行版的一部分,也可以在他们的 their page 中找到。使用以下配置,针对 12 线程服务器进行了优化,而没有完全杀死它,我能够达到 2 000 qps 以上,峰值约为 100 000 qps。
# /etc/unbound/unbound.conf
server:
verbosity: 1
num-threads: 10
outgoing-range: 32768
msg-cache-size: 400m
msg-cache-slabs: 8
num-queries-per-thread: 8192
unknown-server-time-limit: 150
rrset-cache-size: 400m
rrset-cache-slabs: 8
infra-cache-slabs: 8
infra-cache-numhosts: 1000000
trust-anchor-file: /etc/unbound/trusted-key.key
key-cache-size: 400m
key-cache-slabs: 8
neg-cache-size: 100m
测试递归解析器
在您配置了您选择的递归解析器之后,可能值得对其进行测试。 This dns-stresstester works well for me. 您可以尝试以下操作:
go get github.com/MickaelBergem/dnsstresss
cd ~/go/bin
./dnsstresss -random -concurrency 400 google.com.
这给了我:
dnsstresss - dns stress tool
Testing resolver: 127.0.0.1:53.
Target domains: [google.com.].
Started 400 threads.
Requests sent: 110445r/s Replies received: 110445r/s (mean=3ms / max=70ms)
Requests sent: 113971r/s Replies received: 113971r/s (mean=3ms / max=108ms)
Requests sent: 93589r/s Replies received: 93589r/s (mean=4ms / max=111ms)
Requests sent: 93986r/s Replies received: 93986r/s (mean=4ms / max=202ms)
Requests sent: 102510r/s Replies received: 102510r/s (mean=4ms / max=75ms)