【发布时间】:2012-07-27 04:52:12
【问题描述】:
我希望通过脚本(特别是 Python 脚本)验证域所有权,并且想知道如何查找 DNS TXT 条目的值。我知道有这方面的服务和网站,但我想用脚本来做。
【问题讨论】:
我希望通过脚本(特别是 Python 脚本)验证域所有权,并且想知道如何查找 DNS TXT 条目的值。我知道有这方面的服务和网站,但我想用脚本来做。
【问题讨论】:
这很容易使用dnspython。这是一个例子:
import dns.resolver
print dns.resolver.query("aaa.asdflkjsadf.notatallsuspicio.us","TXT").response.answer[0][-1].strings[0]
这给出了以下输出:
PnCcKpPiGlLfApDbDoEcBbPjIfBnLpFaAaObAaAaMhNgNbIfPbHkMiEfPpGgJfOcPnLdDjBeHkOjFjIbPbIoKhIjHfJlAhAhFgGbGgNlMgKmFkLgNfBjMbCoBeNbGeOnAeHgLmKoFlLhLmDcKlEdEbDpFeHkFaBlGnHiOnChIoMlIhBgOnFfKoEhDnFkKfDaMgHbJhMgPgMjGiAoJpKjKkPaIcAdGiMbIbBbAfEiKjNbCeFoElKgOePmGjJaImL
另一种选择是在子进程中使用dig:
import subprocess
print subprocess.Popen(["dig","-t","txt","aaa.asdflkjsadf.notatallsuspicio.us","+short"], stdout=subprocess.PIPE).communicate()[0]
【讨论】:
subprocess.check_output() 而不是.communicate()
check_output 看起来更简单一些。
check_output 和许多其他包装器简化了简单案例的逻辑。仅当所有 check_* 包装器对您的需求太简单时,您才应该使用裸 Popen。
这可能过于简化,但如果您只想快速阅读 TXT 记录并且不介意单独处理解析结果:
nslookup -q=txt somedomain.com
我发现这满足了我的需要,又短又甜。
【讨论】:
找到了另一种使用dnspython 获取域的所有 TXT 记录列表的方法。
import dns.resolver
[dns_record.to_text() for dns_record in dns.resolver.resolve("your-domain-here", "TXT").rrset]
【讨论】:
这样的方法至少应该可以获取 URL 的值,我以 google.com 为例。
import pycurl
import StringIO
url = "whatsmyip.us/dns_txt.php?host=google.com"
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, ["Accept:"])
txtcurl = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, txtcurl.write)
c.perform
data = txtcurl.getvalue()
data = data.replace("Done!", "")
print data
我没有对此进行任何测试,而是从以前的项目中提取了它。
祝你好运!
【讨论】:
requests.get("http://whatsmyip.us/dns_txt.php?host=google.com") 代替。