在python中使用dig命令

时间:2011-03-08 16:49:23

标签: python dns cname dig

只是预警,我的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模块,有很多来自堆栈溢出社区的帮助,但我发现文档真的很混乱。

任何指向正确方向的人都会非常感激。

此致

克里斯。

2 个答案:

答案 0 :(得分:43)

很有可能从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

答案 1 :(得分:4)

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.