2017-01-18 58 views
0

我想在我的路由器中更改DNS服務器並在DNS服務器中我希望每個請求都會返回相同的站點。基本上我需要添加更多的邏輯來確保DNS響應的答案。 我不想從頭開始寫DNS。你有什麼建議嗎? 也許,開源DNS(מØ無論用什麼語言,C,CPP,蟒蛇,JAVA ......),可我很容易地改變(如果是這樣,其中一個,在哪裏)創建一個DNS服務器並將所有請求重定向到我的站點

  • 我能和谷歌這樣做-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

我只是留下代碼本身,以防將來無法使用。 –

相關問題