繁体   English   中英

DNS 查找的人类可读形式

[英]Human readable form of DNS lookup

我有一个非常简单的想法,我想尝试一下。 假设我有一个浏览器,例如 chrome,我想搜索域名的 ip,比如www.google.com 我使用 windows 7 并且我已将 dns 查找属性设置为手动并给出了我的服务器的地址127.0.0.1 (用 ZA7F5F35426B927411FC9231B56382 编写)正在运行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 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

如果您想使用 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

享受!

如果您只想阅读在您的机器上发送/接收的查询,您可以使用Wireshark

如果你真的想解码 DNS 请求作为练习,那么你最好的初始资源是 DNS RFC: http://tools.ietf.org/html/rfc1035

如果您只是想在 python 中进行 nslookup,请查看http://small-code.blogspot.com/2008/05/nslookup-in-python.ZFC35FDC70D5FC67A569883A82ZEC

如果您真的想要原始的 DNS 服务器响应,那就另当别论了。 目标到底是什么?

你的目标是什么?

如果你想了解 DNS 是如何运作的,你可以从阅读相关的 RFC 开始。 或者使用wireshark为您捕获和分析DNS流量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM