标签: dnspython

在 dnspython 中返回“A”DNS 记录

我正在使用dnspython获取“A”记录并返回结果(给定域的 IP 地址)。

我有这个简单的测试 python 脚本:

import dns.resolver

def resolveDNS():
    domain = "google.com" 
    resolver = dns.resolver.Resolver(); 
    answer = resolver.query(domain , "A")
    return answer

resultDNS = resolveDNS()
print resultDNS
Run Code Online (Sandbox Code Playgroud)

但是,输出是:

<dns.resolver.Answer object at 0x0000000004F56C50>
Run Code Online (Sandbox Code Playgroud)

我需要将结果作为字符串。如果是字符串数组,如何返回?

python dns dnspython domain-name

5
推荐指数
2
解决办法
7928
查看次数

如何配置 mypy 以忽略特定模块的存根文件?

我在 Ubuntu 22.10 下使用“pip install dnspython”安装了“dnspython”包,并制作了以下简短脚本:

#!/usr/bin/env python3

import dns.zone
import dns.query

zone = dns.zone.Zone("example.net")
dns.query.inbound_xfr("10.0.0.1", zone)

for (name, ttl, rdata) in zone.iterate_rdatas("SOA"):
    serial_nr = rdata.serial
Run Code Online (Sandbox Code Playgroud)

当我使用 mypy(版本 0.990)检查此代码片段时,它会报告第error: Module has no attribute "inbound_xfr" [attr-defined]7 行。

根据mypy 文档,如果 Python 文件和存根文件都存在于搜索路径上的同一目录中,则仅使用存根文件。对于“dnspython”,存根文件query.pyi存在于dns包中,并且存根文件确实没有属性“inbound_xfr”。当我重命名或删除存根文件时,将query.py使用 Python 文件而不是存根文件,并且 mypy 不再抱怨缺少属性。

我猜这是一个“dnspython”错误?有没有办法告诉 mypy 对于query模块,应该忽略存根文件?

python dnspython mypy

4
推荐指数
1
解决办法
1908
查看次数

Python DNS解析器和原始TTL

我需要在每个查询中获取DNS记录的原始TTL。DNS解析器仅在第一次查询时显示原始ttl。它显示了在每个下一个查询上重置缓存的时间。

>>> answer = dns.resolver.query('www.stackoverflow.com')
>>> print answer.rrset.ttl
300
>>> answer = dns.resolver.query('www.stackoverflow.com')
>>> print answer.rrset.ttl
292
Run Code Online (Sandbox Code Playgroud)

如何在任何查询中获取原始TTL?

python dns dnspython ttl

3
推荐指数
1
解决办法
3715
查看次数

使用 asyncio 和 dnspython 异步发送 DNS 查询

假设我想使用 dnspython 为 Alexa 前 100 万站点发送各种类型的 DNS 查询(A、AAAA、NS、SOA、DNSKEY、NSEC3、DS 等)。

一项一项地执行此操作会花费一点时间,因为我要为每个站点发送多个查询。所以我希望在 python 3 中使用 asyncio 执行一些并行操作。

我经历了大卫的生成器/协程三部曲,http://www.dabeaz.com/talks.html,但我仍然不确定如何完成我的简单任务......

进一步来说,

results = dns.resolver.query('google.com','AAAA')
Run Code Online (Sandbox Code Playgroud)

是一个阻塞函数调用,等待 DNS 回复返回。

如何在这段等待时间内发送其他查询而不使用线程?由于 DNS 查询通常是 udp 数据包,因此我认为 asyncio 可能会有所帮助。

pycares 似乎不支持我需要的所有记录类型,因此 pycares 和 aiodns 不适用于我的情况。

任何参考和想法都会有所帮助。

python dns dnspython coroutine python-asyncio

3
推荐指数
1
解决办法
3848
查看次数

ModuleNotFoundError: 没有名为“dnspython”的模块

我正在尝试dnspython使用import dnspython.

pip3 freeze 显示该软件包已安装,但我不断收到错误消息 ModuleNotFoundError: No module named 'dnspython'

我试过了:

  • pip3 install dnspython
  • 使用 pip3 卸载和重新安装
  • pip3 install git+https://github.com/rthalley/dnspython
  • 从github克隆包并安装 sudo python setup.py install
  • pip3 install dnspython3import dnspython3在脚本中使用
  • 复制site-packages文件夹中克隆包的dns文件夹

我知道这篇关于 python 2.7 的帖子,但没有一个解决方案有效。

python dnspython python-3.6

2
推荐指数
1
解决办法
4725
查看次数

尽管有查询答案,dnspython仍然会提出NoAnswer

当我使用dnspython查询权威名称服务器的NS记录时,它会引发NoAnswer异常,尽管我的数据包捕获表明收到了正确的响应.

示例:请求j.gtld-servers.net(192.48.79.30)获取stackoverflow.com的NS记录

>>> import dns.resolver
>>> r = dns.resolver.Resolver()
>>> r.nameservers = ['192.48.79.30']
>>> for answer in r.query('stackoverflow.com', 'NS'):
...     print answer.to_text()
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/dns/resolver.py", line 905, in query
    raise_on_no_answer)
  File "/usr/local/lib/python2.7/dist-packages/dns/resolver.py", line 142, in __init__
    raise NoAnswer
dns.resolver.NoAnswer
>>>
Run Code Online (Sandbox Code Playgroud)

Wireshark显示答案确实回来了:

Frame 2: 157 bytes on wire (1256 bits), 157 bytes captured (1256 bits)
Ethernet II, Src: xxxxxxxxxxxxxx (xx:xx:xx:xx:xx:xx), Dst: xxxxxxxxxxxxx (xx:xx:xx:xx:xx:xx)
Internet Protocol Version 4, Src: 192.48.79.30 (192.48.79.30), …
Run Code Online (Sandbox Code Playgroud)

dns dnspython python-2.7

1
推荐指数
1
解决办法
4031
查看次数

使用不同的名称服务器进行查询

我要更改域的默认名称服务器,然后获取其 A 记录!我尝试使用以下代码,但问题是,当我使用 IP 地址作为名称服务器时,一切正常,但当我使用名称服务器名称(例如“ns1.google.com”)时,我无法运行代码并出现异常。有什么想法吗?(我使用了这里的代码:使用 dns.resolver (pythondns) 设置特定的 DNS 服务器

def NsLookupSpecificNS(domain):
    my_resolver = dns.resolver.Resolver()

    # 8.8.8.8 is Google's public DNS server
    my_resolver.nameservers = ['216.239.38.10']

    answer = my_resolver.query('google.com', 'A')
    try:
        for rdata in answer:
            print rdata
    except dns.resolver.NoAnswer:
            pass
Run Code Online (Sandbox Code Playgroud)

我已经厌倦了以下内容:

def NsLookupSpecificNS(domain):
    my_resolver = dns.resolver.Resolver()

    # 8.8.8.8 is Google's public DNS server
    my_resolver.nameservers = ['ns1.google.com']

    answer = my_resolver.query('google.com', 'A')
    try:
        for rdata in answer:
            print rdata
    except dns.resolver.NoAnswer:
            pass
Run Code Online (Sandbox Code Playgroud)

这是我得到的:

Traceback (most recent call last):
  File "C:\Users\My Documents\LiClipse …
Run Code Online (Sandbox Code Playgroud)

python dns dnspython

1
推荐指数
1
解决办法
2951
查看次数

如何使用 dnspython 查询某个域的所有 IP

我使用dnspython查询 DNS 服务器以将域名解析为其 IP。

当我尝试解析“google.co.uk”时,我只得到一个 IP。然而,使用另一个解析器工具我得到另一个IP。两个IP都是正确的,我通过将IP放在浏览器中来测试它们,都打开“google.co.uk”。

显然,为我正在测试的域名分配了多个IP。有什么方法可以在 dnspython 中使用来检索给定域名的所有 IP 吗?

这是我的简单脚本:

import dns.resolver

def resolve(domain):
  resolveList = []
      resolver = dns.resolver.Resolver(); #create a new instance named Resolver
      answer = resolver.query(domain,"A");
      y=0
      for rData in answer: 
          resolveList.append(rData)
          ++y        
  return resolveList

domainName = "google.co.uk"
queryResult = resolve(domainName);
for result in queryResult:
    print queryResult[0]
Run Code Online (Sandbox Code Playgroud)

python sockets dns network-programming dnspython

1
推荐指数
1
解决办法
2677
查看次数