22

只是一个警告,我的 python 技能几乎不存在,但我正在努力学习。

我在周末通过我们的 DNS 控制面板对大约 58 个 CNAMES 进行了一些更改(只是更改了目的地)

而不是检查每个单独记录的更改是否已经生效,我想知道是否有一种方法可以为 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 的东西?我之前在堆栈溢出社区的(很多)帮助下使用过 dnspython 模块,但我发现文档确实令人困惑。

任何指向正确方向的指针将不胜感激。

问候

克里斯。

4

3 回答 3

55

从 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
于 2011-03-08T19:07:47.183 回答
6

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.
于 2011-03-08T16:59:50.167 回答
1

找到 2 个额外的 Python 库,用于类似 dig 的命令。
它们都称为pydig

1 )莱昂史密斯/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)书雀/pydig

安装:(
以root身份)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
于 2021-10-20T18:19:18.250 回答