我想告诉urllib2.urlopen(或自定义开启者)使用127.0.0.1(或::1)来解析地址.但是,我不会改变我的/etc/resolv.conf.
一种可能的解决方案是使用类似dnspython查询地址和httplib构建自定义URL开启工具的工具.我更喜欢告诉urlopen使用自定义名称服务器.有什么建议?
我需要有一个dns查询功能来查询服务器的各种记录.我想出了如何获得MX记录(大多数例子都显示了这一点),A记录和NS记录.如何获取TXT,CNAME和SOA记录?
示例代码段:
import dns.resolver
answer=dns.resolver.query("google.com", "A")
for data in answer:
print data.address
Run Code Online (Sandbox Code Playgroud)
我尝试用TXT和data.address对象替换查询类型与data.text,data.data等,但最终导致属性错误.我之前提到的数据类型有哪些参考?
我知道有人会面临这个问题。我今天遇到了这个问题,但我可以及时解决它,我想分享我的解决方案:
问题:
from flask_socketio import SocketIO
Run Code Online (Sandbox Code Playgroud)
您将收到类似以下内容的输出错误:
属性错误:模块“dns.rdtypes”没有属性 ANY
仅当您安装了 eventlet 时才会发生这种情况,因为它会随之安装 dnspython。
解决办法很简单,重新安装之前发布的dnspython即可:
python3 -m pip install dnspython==2.2.1
问题应该消失
我正在尝试从Atlas连接MongoDB,但遇到了:
dnspython必须安装错误
我的mongo uri(样机):mongodb+srv://abc:123@something.something.com/admin?retryWrites=True
我的pymongo版本:3.6.1
我已经安装dnspython并完成import dns
仍然,我得到错误:
必须安装dnspython模块才能使用mongodb + srv:// URI
作为我正在编写的工具的一部分,我希望有一个诊断,告诉用户他们是否已为特定服务正确配置了他们的域的DNS.我想查询权威DNS服务器的域名,以便我可以绕过任何缓存的结果.
在Python中捕获泛型异常是否合理,然后用于isinstance()检测特定类型的异常以便正确处理它?
我现在正在使用dnspython工具包,它有一系列例外,例如超时,NXDOMAIN响应等等.这些例外是子类dns.exception.DNSException,所以我想知道它是否合理,或者是pythonic,以便捕获DNSException然后用isinstance().检查一个特定的例外.
例如
try:
answers = dns.resolver.query(args.host)
except dns.exception.DNSException as e:
if isinstance(e, dns.resolver.NXDOMAIN):
print "No such domain %s" % args.host
elif isinstance(e, dns.resolver.Timeout):
print "Timed out while resolving %s" % args.host
else:
print "Unhandled exception"
Run Code Online (Sandbox Code Playgroud)
我是Python的新手,所以要温柔!
我有一个小脚本,检查大量的域列表中的MX记录,一切正常,但是当脚本找到没有记录的域时,跳转到下一个域需要很长时间.
我试过添加:
query.lifetime = 1.0
or
query.timeout = 1.0
Run Code Online (Sandbox Code Playgroud)
但这似乎没有做任何事情.有谁知道如何配置此设置?
我的脚本在下面,谢谢你的时间.
import dns.resolver
from dns.exception import DNSException
import dns.query
import csv
domains = csv.reader(open('domains.csv', 'rU'))
output = open('output.txt', 'w')
for row in domains:
try:
domain = row[0]
query = dns.resolver.query(domain,'MX')
query.lifetime = 1.0
except DNSException:
print "nothing here"
for rdata in query:
print domain, " ", rdata.exchange, 'has preference', rdata.preference
output.writelines(domain)
output.writelines(",")
output.writelines(rdata.exchange.to_text())
output.writelines("\n")
Run Code Online (Sandbox Code Playgroud) 考虑这种情况:使用nsupdate我可以使用以下方法从A记录中删除IP:
update delete test-record.mydomain.com 60 A 172.16.1.4
Run Code Online (Sandbox Code Playgroud)
这是我使用dnspython的简单实现,其中bind_host是我们的绑定服务器,domain_name是"mydomain.com".和sub_domain是"test-record",ip是"172.16.1.4".
def delete_dns_record(self, bind_host, domain_name, sub_domain, ip):
update = dns.update.Update(domain_name)
update.delete(sub_domain, '60', 'A', ip)
response = dns.query.tcp(update, bind_host, timeout=10)
return response
Run Code Online (Sandbox Code Playgroud)
运行函数将抛出以下错误:
Traceback (most recent call last):
File "dns_magic/check.py", line 136, in <module>
dnstest()
File "dns_magic/check.py", line 134, in dnstest
print(hc.delete_dns_record('1.2.3.4', 'mydomain.com.', 'test-record', '172.16.1.4' ))
File "dns_magic/check.py", line 106, in delete_dns_record
update.delete(sub_domain, '60', 'A', ip)
File "dns_magic/lib/python3.6/site-packages/dns/update.py", line 160, in delete
rdtype = dns.rdatatype.from_text(rdtype)
File "dns_magic/lib/python3.6/site-packages/dns/rdatatype.py", line 214, in from_text
raise UnknownRdatatype
dns.rdatatype.UnknownRdatatype: …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建快速脚本来解析单个域名的所有DNS记录.'ANY'命令似乎可以解决这个问题,但我对TTL有一些奇怪的问题.当使用ANY时这样
domain = dns.name.from_text(domain)
nameserver = '127.0.0.1'
query = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.udp(query, nameserver, timeout = 2)
print response
Run Code Online (Sandbox Code Playgroud)
返回的数据是我需要的,但是当TTL到期时,脚本只是不返回过期的记录.'DIG domain ANY'命令似乎也有这个问题.
所以我的问题是获取单个域的所有DNS记录的最快方法是什么?
我尝试使用dns python并希望获取所有ANY类型查询的记录:
import dns.name
import dns.message
import dns.query
domain = 'google.com'
name_server = '8.8.8.8'
domain = dns.name.from_text(domain)
if not domain.is_absolute():
domain = domain.concatenate(dns.name.root)
request = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.udp(request, name_server)
print response.answer
print response.additional
print response.authority
Run Code Online (Sandbox Code Playgroud)
但它回报了我
[]
[]
[]
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下命令发出此请求dig:
$ dig @8.8.8.8 google.com -t ANY
; <<>> DiG 9.9.2-P1 <<>> @8.8.8.8 google.com -t ANY
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, …Run Code Online (Sandbox Code Playgroud)