【问题标题】:Does DNSpython have a method that automatically performs a forward or reverse lookup depending on the value that it's passed?DNSpython 是否具有根据传递的值自动执行正向或反向查找的方法?
【发布时间】:2020-04-17 03:19:10
【问题描述】:

我想知道是否有办法将主机、fqdn 或 IP 地址传递给 DNSPython,并让它执行正确的查找(主机和 fqdns 转发,ips 反向)。另外,我想知道最初向该方法发送了什么样的地址(主机、fqdn 或 ip)。

提前致谢

【问题讨论】:

    标签: python-3.x dns dnspython


    【解决方案1】:

    据我所知,没有一个函数可以满足您的需求。但是,实施起来不会太难。这就是我可能会这样做的方式。

    首先,我会检查输入是否是 IP 地址

    import ipaddress
    
    def is_ipaddress(string):
        try:
            ipaddress.ip_address(string)
            return True
        except ValueError:
            return False
    

    如果是 IP 地址,我会调用 dns.query.reverse_query()。这是假设我已经从 Github 安装了最新的 dnspython 开发版本,因为 reverse_query() 是最近才添加的(参见 https://github.com/rthalley/dnspython/commit/7c105cce64699e1a221176f98f7cb9e682aba1e0)。

    如果不是 IP 地址,我会使用 dns.message.make_query(name, rdtype) 准备查询,然后使用 dns.query.udp() 发送。

    如果您想在 /etc/reolv.conf 中使用 search 的值,您可以考虑创建一个 dns.resolver.Resolver,它目前默认执行搜索处理。

    import dns.resolver
    import dns.rdatatype
    
    resolver = dns.resolver.Resolver()
    response = resolver.query('my-computer', dns.rdatatype.A)
    

    【讨论】:

    • 谢谢!我修改了 except 子句以确定字符串是 FQDN 还是主机。 ` 除了 ValueError: if '.'在字符串中:返回 'FQDN' 其他:返回 'Host' ` 你认为检查一个 '.'足以确定某事是 FQDN 还是我应该检查其他内容?
    • 没问题。感谢您提供有关 ValueError 的信息,我忘记了 ipaddress.ip_address 引发的异常。我不确定我是否理解“host”和“fqdn”之间的区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多