2011-07-02 1 views
2

私は試してみたいという非常に簡単な考えを持っています。たとえば、ブラウザがChromeで、ドメイン名のIPを検索したいとします(www.google.com)。私はWindows 7を使用して、手動でDNS検索プロパティを設定して、127.0.0.1(私のサーバ(Pythonで書かれている)が実行されている)アドレスを与えました。私は自分のサーバーを開始し、私は、DNSクエリを見ることができますが、次のように顔を見せているのように、それは非常に奇妙だった:人間が読める形式のDNS検索

WAITING FOR CONNECTION......... 

.........recieved from : ('127.0.0.1', 59339) 

'V"\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x06teredo\x04ipv6\tmicrosoft\x03com\x00\x00\x01\x00\x01' 

waiting for connectionreceived fromは私のサーバーからです。このメッセージの内訳形式(人間が判読可能な形式)を取得するにはどうすればよいですか?

これは私のサーバーのコード(まだ静か基本けど)である:ここでは

はコードです:

from time import sleep 
import socket 
host='' 
port=53 
addr_list=(host,port) 
buf_siz=1024 
udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
udp.bind(addr_list) 
while True: 
    print 'WAITING FOR CONNECTION.........' 
    data,addr = udp.recvfrom(buf_siz) print '.........recieved from : ',addr 
    sleep(3) 
    print data 
+1

IPを検索する場合は、digまたはnslookupを使用するだけではどうですか? – Ward

答えて

1

あなたは自分のマシン上で受信/送信されているクエリを読みたい場合は、あなたはWiresharkを使うことができます。

あなたが実際に練習としてDNS要求をデコードする場合は、あなたの最高の最初のリソースは、DNSのRFCです:http://tools.ietf.org/html/rfc1035

-1

あなたの目標は何ですか?

DNSがどのように動作するかを知りたい場合は、まず関連するRFCを読むことができます。または、wiresharkを使用してDNSトラフィックを取得して分析します。あなただけのpythonでnslookupコマンドをしようとしている場合は、実際には別の話だ生のDNSサーバーの応答が必要な場合

+0

**両方**。 wiresharkのみを使用すると、プロトコルの不完全な理解につながる可能性があります。 – Alnitak

+0

RFCを読むのも同じです。 – JdeBP

+0

@JdeBPこれは、他のものよりもDNS RFCのほうがあまり真実ではありません。 – Alnitak

3

Pythonを使用してクエリデータを分析する場合、私は優れたscapyライブラリ(http://www.secdev.org/projects/scapy/)を推奨します。これは、多くのネットワークプロトコルのデコード(およびビルド)ルーチンを持っていますDNSを含むここで

はscapyデコードを使用して、元のプログラムが追加されます:

from time import sleep 
import socket 
from scapy.all import DNS #Bring in scapy's DNS decoder 

host='' 
port=53 
addr_list=(host,port) 
buf_siz=1024 
udp=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
udp.bind(addr_list) 
while True: 
    print 'WAITING FOR CONNECTION.........' 
    data,addr = udp.recvfrom(buf_siz) print '.........recieved from : ',addr 
    sleep(3) 
    #Decode the DNS data 
    decoded = DNS(data) 
    #Print the decoded packet 
    decoded.show() 

生のパケットのためにあなたの質問に、これは出力します。http://www.secdev.org/projects/scapy/doc/installation.html#installing-scapy-v2-x

場合:

Scapyのインストール手順は、ここにある

###[ DNS ]### 
    id  = 22050 
    qr  = 0L 
    opcode = QUERY 
    aa  = 0L 
    tc  = 0L 
    rd  = 1L 
    ra  = 0L 
    z   = 0L 
    rcode  = ok 
    qdcount = 1 
    ancount = 0 
    nscount = 0 
    arcount = 0 
    \qd  \ 
    |###[ DNS Question Record ]### 
    | qname  = 'teredo.ipv6.microsoft.com.' 
    | qtype  = 12288 
    | qclass = 256 
    an  = None 
    ns  = None 
    ar  = None 
###[ Raw ]### 
    load  = '\x01' 
をあなただけのubuntuを使用して、ちょうど sudo apt-get install python-scapy

お楽しみください!

関連する問題