2017-01-18 10 views
0

Я хочу изменить на своем маршрутизаторе DNS-сервер и DNS-сервер, я хочу, чтобы каждый запрос вернул тот же сайт. В основном мне нужно добавить еще немного логики, чтобы ответить на ответ DNS. Я не хочу писать DNS с нуля. У вас есть предложения для меня? может быть, с открытым исходным кодом (DNS מ о каком бы языке-с, каст, Python, Java ...), что я могу легко изменить (если да, то какой и где)Создайте DNS-сервер и перенаправьте весь запрос на мой сайт

  • я могу сделать это с помощью Google -cloud-dns?

Благодарю вас.

ответ

2

Посмотрите здесь: http://code.activestate.com/recipes/491264-mini-fake-dns-server/ Это сценарий Python, и он выглядит точно так, как вам нужно.

import socket 

class DNSQuery: 
    def __init__(self, data): 
    self.data=data 
    self.dominio='' 

    tipo = (ord(data[2]) >> 3) & 15 # Opcode bits 
    if tipo == 0:      # Standard query 
     ini=12 
     lon=ord(data[ini]) 
     while lon != 0: 
     self.dominio+=data[ini+1:ini+lon+1]+'.' 
     ini+=lon+1 
     lon=ord(data[ini]) 

    def respuesta(self, ip): 
    packet='' 
    if self.dominio: 
     packet+=self.data[:2] + "\x81\x80" 
     packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00' # Questions and Answers Counts 
     packet+=self.data[12:]           # Original Domain Name Question 
     packet+='\xc0\x0c'            # Pointer to domain name 
     packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04'    # Response type, ttl and resource data length -> 4 bytes 
     packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.'))) # 4bytes of IP 
    return packet 

if __name__ == '__main__': 
    ip='192.168.1.1' 
    print 'pyminifakeDNS:: dom.query. 60 IN A %s' % ip 

    udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    udps.bind(('',53)) 

    try: 
    while 1: 
     data, addr = udps.recvfrom(1024) 
     p=DNSQuery(data) 
     udps.sendto(p.respuesta(ip), addr) 
     print 'Respuesta: %s -> %s' % (p.dominio, ip) 
    except KeyboardInterrupt: 
    print 'Finalizando' 
    udps.close() 

С уважением.

+0

Я бы просто оставил код сам, если он не будет доступен в будущем. –