我有一个非常简单的想法,我想尝试一下。假设我有一个浏览器,例如chrome,我想搜索域名的IP,比如说www.google.com
。我使用Windows 7,我已将dns查找属性设置为手动,并给出了我的服务器(用Python编写的)运行的地址127.0.0.1
。我启动了我的服务器,我可以看到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 connection
和received 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
答案 0 :(得分:4)
如果你想使用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()
对于你问题中的原始数据包,打印:
###[ 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'
Scapy安装说明在此处:http://www.secdev.org/projects/scapy/doc/installation.html#installing-scapy-v2-x
如果你使用ubuntu,只需sudo apt-get install python-scapy
享受!
答案 1 :(得分:2)
如果您只想阅读计算机上发送/接收的查询,可以使用Wireshark。
如果您确实想要将DNS请求解码为练习,那么您最好的初始资源是DNS RFC:http://tools.ietf.org/html/rfc1035
答案 2 :(得分:0)
如果您尝试在python中执行nslookup,请查看http://small-code.blogspot.com/2008/05/nslookup-in-python.html
如果您确实希望原始DNS服务器响应是另一个故事。究竟是什么目标?
答案 3 :(得分:-2)
你的目标是什么?
如果您想了解DNS的运作方式,可以先阅读相关的RFC。或者使用wireshark为您捕获和分析DNS流量。