2017-01-09 8 views
1

Я собираюсь изменить сервер имен по умолчанию для домена, а затем получить его записи A! Я попытался использовать следующий код, но проблема в том, что когда я использую IP-адрес в качестве сервера имен, все работает, но когда я использовал имя сервера имен, например «ns1.google.com», я не мог запустить код и получить исключение. Любая мысль (я использовал код здесь: Set specific DNS server using dns.resolver (pythondns))?запрос с другим сервером имен

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 

Я устал следующее:

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 

И вот что я получил:

Traceback (most recent call last): 
    File "C:\Users\My Documents\LiClipse Workspace\DNS\Lookup.py", line 49, in <module> 
    NsLookupSpecificNS('google.com') 
    File "C:\Users\My Documents\LiClipse Workspace\DNS\Lookup.py", line 33, in NsLookupSpecificNS 
    answer = my_resolver.query('google.com', 'A') 
    File "C:\Python27\lib\site-packages\dns\resolver.py", line 962, in query 
    source_port=source_port) 
    File "C:\Python27\lib\site-packages\dns\query.py", line 242, in udp 
    if _addresses_equal(af, from_address, destination) or \ 
    File "C:\Python27\lib\site-packages\dns\query.py", line 169, in _addresses_equal 
    n2 = dns.inet.inet_pton(af, a2[0]) 
    File "C:\Python27\lib\site-packages\dns\inet.py", line 51, in inet_pton 
    return dns.ipv4.inet_aton(text) 
    File "C:\Python27\lib\site-packages\dns\ipv4.py", line 48, in inet_aton 
    raise dns.exception.SyntaxError 
dns.exception.SyntaxError: Text input is malformed. 
+1

какое исключение? Всегда ставится под вопрос полное сообщение об ошибке. Существует много полезной информации. – furas

+1

где находится dns.resolver? –

+0

@furas Я обновил вопрос! – Alex

ответ

2

В dnspython, переменная экземпляра nameservers принимает список ip-адресов, а не доменных имен, и именно поэтому вы получаете эту ошибку. Вам нужно отдельно запросить адрес ns1.google.com и использовать этот адрес (или адреса) для последующего запроса. Конечно, это задает вопрос о том, где вы делаете этот первый запрос. Для этого вы можете попробовать использовать системный преобразователь.

 Смежные вопросы

  • Нет связанных вопросов^_^