2017-01-09 37 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的地址並將該地址(或多個地址)用於後續查詢。當然,這引發了你做出第一個查詢的地方的問題。爲此,您可以嘗試使用系統解析器。