在Python中使用dig命令
我先说一下,我的Python技能几乎为零,但我正在努力学习。
这个周末,我打算通过我们的DNS控制面板对大约58个CNAME做一些修改(只是更改目标地址)。
而且,我不想一个一个去检查这些修改是否生效,所以我在想有没有办法用Python写个脚本,自动检查每个CNAME的状态?
我用的dig命令大概是这样的:
dig @ns1.netnames.net www.rac.co.uk CNAME
我希望能看到返回的结果是rac-secure.gslb2.rac.co.uk
。
我试过类似这样的代码:
import os
os.system( 'dig<exampledomain.com>'CNAME )
但是好像没有成功(正如我说的,我的Python技能很差),我这样做对吗?还是应该用像dnspython这样的工具?我之前在Stack Overflow社区的帮助下用过dnspython模块,但我觉得它的文档实在太复杂了。
如果能给我一些正确的方向建议,我会非常感激。
谢谢
克里斯。
3 个回答
3
发现了两个额外的Python库,可以用来执行类似于dig的命令。
这两个库的名字都是pydig。
安装方法:
pip install pydig
使用方法:
>>> import pydig
>>> pydig.query('example.com', 'A')
['93.184.216.34']
>>> pydig.query('www.github.com', 'CNAME')
['github.com.']
>>> pydig.query('example.com', 'NS')
['a.iana-servers.net.', 'b.iana-servers.net.']
2) shuque/pydig。
安装方法:
(以管理员身份) python3 setup.py install
使用方法:
pydig www.example.com
pydig www.example.com A
pydig www.example.com A IN
pydig @10.0.1.2 example.com MX
pydig @dns1.example.com _blah._tcp.foo.example.com SRV
pydig @192.168.42.6 +dnssec +norecurse blah.example.com NAPTR
pydig @dns2.example.com -6 +hex www.example.com
pydig @192.168.72.3 +walk secure.example.com
8
os.system
这个方法已经不推荐使用了。建议你使用subprocess.Popen来代替它:
import subprocess
import shlex
cmd='dig @ns1.netnames.net www.rac.co.uk +short'
# cmd='dig @ns1.netnames.net www.rac.co.uk CNAME'
proc=subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE)
out,err=proc.communicate()
print(out)
# rac-secure.gslb.norwichunion.com.
56
你可以在Python中使用dig,不过直接用一个Python库可能会更省事。可以看看dnspython,这个库能让你更轻松地完成所有操作,而且你不需要去解析输出格式。
import socket
import dns.resolver
# Basic query
for rdata in dns.resolver.query('www.yahoo.com', 'CNAME') :
print rdata.target
# Set the DNS Server
resolver = dns.resolver.Resolver()
resolver.nameservers=[socket.gethostbyname('ns1.cisco.com')]
for rdata in resolver.query('www.yahoo.com', 'CNAME') :
print rdata.target