2017-01-18 7 views
0

라우터에서 DNS 서버를 변경하고 모든 요청이 동일한 사이트를 반환하도록하려는 DNS 서버에서 변경하려고합니다. 기본적으로 나는 DNS 응답에 대한 답을 얻기 위해 좀 더 많은 로직을 추가해야한다. 처음부터 DNS를 작성하고 싶지 않습니다. 나 제안이있어? 어쩌면, 오픈 소스 DNS (מ 오없이 언어 C, CPP, 파이썬, 자바 ...) 그게 내가 쉽게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

앞으로 사용할 수없는 경우를 대비해서 코드 자체를 남겨 두었습니다. –