Удобная для чтения форма поиска DNS - PullRequest
2 голосов
/ 02 июля 2011

У меня есть очень простая идея, которую я хочу попробовать. Скажем, у меня есть браузер, например, chrome, и я хочу найти ip доменного имени, скажем, www.google.com. Я использую Windows 7, и я установил свойства поиска DNS вручную и дал адрес 127.0.0.1, где работает мой сервер (написанный на Python). Я запустил свой сервер, и я мог видеть запрос 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

Ответы [ 4 ]

4 голосов
/ 18 июля 2011

Если вы хотите проанализировать данные запроса с помощью 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

Наслаждайтесь!

2 голосов
/ 02 июля 2011

Если вы просто хотите прочитать запросы, которые отправляются / принимаются на вашем компьютере, вы можете просто использовать Wireshark .

Если вы действительно хотите декодировать запросы DNS в качестве упражнениятогда ваш лучший начальный ресурс - DNS RFC: http://tools.ietf.org/html/rfc1035

0 голосов
/ 04 июля 2011

Если вы пытаетесь просто выполнить nslookup в python, посмотрите http://small -code.blogspot.com / 2008/05 / nslookup-in-python.html

Если вы действительно хотите получить отклик необработанного DNS-сервера, это уже другая история.Что именно является целью?

0 голосов
/ 02 июля 2011

Какова ваша цель?

Если вы хотите узнать, как работает DNS, вы можете начать с чтения соответствующих RFC. Или используйте wireshark для захвата и анализа трафика DNS для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...