Почему dnspython терпит неудачу при разрешении, а хост разрешается в оболочке? - PullRequest
0 голосов
/ 16 мая 2019

Я хотел бы использовать dnspython для разрешения некоторых имен, но не понимаю, почему некоторые хосты разрешены, а некоторые нет (несмотря на то, что все решаются в оболочке)

На уровне оболочки:

C:\Windows\System32>ping -n 1 google.com

Pinging google.com [216.58.213.174] with 32 bytes of data:
Reply from 216.58.213.174: bytes=32 time=2ms TTL=52
(...)

C:\Windows\System32>ping -n 1 rpi1.swtk.info

Pinging rpi1.swtk.info [192.168.10.239] with 32 bytes of data:
Reply from 192.168.10.239: bytes=32 time=11ms TTL=63
(...)

rpi1.swtk.info - это внутренний хост, разрешенный через внутренний DNS.

То же упражнение в Python:

C:\Windows\System32>python
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import dns.resolver
>>> resolver = dns.resolver.Resolver()
>>> a = resolver.query('google.com', dns.rdatatype.A)
>>> a[0]
<DNS IN A rdata: 172.217.19.238>
>>> a = resolver.query('rpi1.swtk.info', dns.rdatatype.A)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Python36-32\lib\site-packages\dns\resolver.py", line 1002, in query
    raise NXDOMAIN(qnames=qnames_to_try, responses=nxdomain_responses)
dns.resolver.NXDOMAIN: None of DNS query names exist: rpi1.swtk.info.

Какой DNS-распознаватель dnspython использует?

Примечания:

  • Сервер, настроенный на компьютере с Windows 10, я 127.0.0.1, это правильно (это сервер unbound, используемый для отправки трафик на разные серверы).

  • Ожидается, что не использование 127.0.0.1 в качестве DNS-сервера приведет к ошибке при разрешении rpi1.swtk.info, поэтому я предпочитаю, что dnspython использует что-то другое, чем сервер по умолчанию (который будет удивительно, хотя).

...