【问题标题】:Using the dig command in python在 python 中使用 dig 命令
【发布时间】:2011-07-11 06:30:10
【问题描述】:

只是一个警告,我的 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 模块,但我发现文档真的很混乱。

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

问候

克里斯。

【问题讨论】:

    标签: python dns cname dig


    【解决方案1】:

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

    【讨论】:

    • 澄清一下,#basic 查询只是检查您的 isp 报告的内容,而 #set dns 服务器检查名称服务器报告的内容吗?
    • 基本查询使用您的默认 /etc/resolv.conf 名称服务器,而 Set 版本允许您指定要调用的名称服务器。
    • 应该是dnspython而不是dynpython。但是 SO 中的 6 个字符限制使我无法编辑上面的答案。
    • 您需要安装pypi.org/project/dnspython3 才能使用python 3
    【解决方案2】:

    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.
    

    【讨论】:

    • 我在尝试运行时遇到了一个相当大的错误:Traceback(最近一次调用最后一次):文件“C:/Users/Chris/Documents/work/python/cname.py” ,第 5 行,在 proc=subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE) 文件“C:\Python26\lib\subprocess.py”,第 623 行,在 _init_ errread, errwrite) File "C:\Python26\lib\subprocess.py", line 833, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified
    • 错误:[Error 2] The system cannot find the file specified 暗示(或至少暗示)您没有名为 dig 的可执行文件。
    • 啊,我刚在工作中尝试过,效果很好,一定是和我的家用桌面有关。谢谢。
    【解决方案3】:

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

    1)leonsmith/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.

    安装:
    (以 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 2018-05-24
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      相关资源
      最近更新 更多