почему я не могу получить информацию о полномочиях с помощью dnspython, в то время как nslookup полезен

#code like this
import dns
import dns.resolver
import dns.name
import dns.message
import dns.query

request = dns.message.make_query("google.com",dns.rdatatype.NS)
response = dns.query.udp(request,"216.239.32.10")
print response.authority

но это ноль

а затем при использовании "nslookup google.com 216.239.32.10"

может получить

Сервер: 216.239.32.10 Адрес: 216.239.32.10#53

Имя: google.com Адрес: 216.58.221.238 Очевидно, это авторитетный ответ, но почему я не могу получить авторитетный раздел при использовании dnspython?


person Nigel Lee    schedule 25.01.2016    source источник
comment
Нет, это не авторитетный ответ. Это авторитетный ответ без раздела AUTHORITY. Полномочия используются для делегирования. dig @216.239.32.10 google.com NS четко покажет вам разделы ОТВЕТ и ДОПОЛНИТЕЛЬНО. Раздел AUTHORITY отсутствует, потому что 216.239.32.10 является авторитетным для google.com (отсюда и флаг aa в ответе), поэтому ему не нужно давать вам новый NS для запроса, у него есть прямой ответ, который находится в разделе ANSWER, с некоторыми дополнительными IP-адресами. в разделе ДОПОЛНИТЕЛЬНО для помощи.   -  person Patrick Mevzek    schedule 28.03.2019


Ответы (2)


Ты уверен?

c:\srv>nslookup google.com 216.239.32.10
Server:  ns1.google.com
Address:  216.239.32.10

Name:    google.com
Addresses:  2a00:1450:400f:805::200e
          178.74.30.16
          178.74.30.49
          178.74.30.37
          178.74.30.24
          178.74.30.26
          178.74.30.59
          178.74.30.57
          178.74.30.48
          178.74.30.46
          178.74.30.27
          178.74.30.53
          178.74.30.35
          178.74.30.20
          178.74.30.42
          178.74.30.31
          178.74.30.38

c:\srv>python
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import dns
>>> import dns.resolver, dns.name
>>> import dns.message, dns.query
>>> r = dns.message.make_query('google.com', dns.rdatatype.NS)
>>> resp = dns.query.udp(r, '216.239.32.10')
>>> print resp.authority
[]
>>> print resp
id 63079
opcode QUERY
rcode NOERROR
flags QR AA RD
;QUESTION
google.com. IN NS
;ANSWER
google.com. 345600 IN NS ns3.google.com.
google.com. 345600 IN NS ns4.google.com.
google.com. 345600 IN NS ns2.google.com.
google.com. 345600 IN NS ns1.google.com.
;AUTHORITY
;ADDITIONAL
ns3.google.com. 345600 IN A 216.239.36.10
ns4.google.com. 345600 IN A 216.239.38.10
ns2.google.com. 345600 IN A 216.239.34.10
ns1.google.com. 345600 IN A 216.239.32.10
>>>
person thebjorn    schedule 25.01.2016
comment
спасибо за ваш ответ, но когда я использую nslookup google.com 8.8.8.8, он получает неавторитетный ответ, однако при использовании dnspython раздел полномочий должен быть нулевым, независимо от сервера имен. Так что со мной не так? большое спасибо! - person Nigel Lee; 25.01.2016

Я также столкнулся с той же проблемой. Оказалось, что некоторые резолверы DNS не отвечают полномочиями или дополнительными разделами (проверьте пакеты с помощью Wireshark).

Измените IP-адрес на 127.0.1.1 в коде Python и убедитесь, что вы настроили преобразователь DNS, который не указывает на исходный преобразователь (проверьте cat /etc/resolv.conf).

Вы должны увидеть раздел полномочий в вашем результате.

person shijimi    schedule 08.08.2018