Exemple #1
0
        query = DnsParser.parseQuery(data)
        address = self.client_address
        print("get dns query from %s,query:%s" %(str(address),str(query.qname)))
        find = False
        if query.qname in Hosts:
            find = True
            ip = Hosts[query.qname]
            print("Find a Hint: %s:%s"%(query.qname, ip))
        if find and query.qtype == "0x0001": #only handle A record
            print('domain:%s in hosts' % query.qname)
            response = DnsParser.generateReqponse(data,ip)
            self.socket.sendto(response,address)
        else:
            print('transfer for %s' % query.qname)
            sock = socket.socket(type=socket.SOCK_DGRAM)
            socket.setdefaulttimeout(5)
            sock.connect(LOCALDNS)
            sock.send(data)
            response, serveraddress = sock.recvfrom(8192*4)
            self.socket.sendto(response,address)

if __name__ == "__main__":
    HOST = "0.0.0.0"
    PORT = 53
    server = None
    try:
        server = SocketServer.ForkingUDPServer((HOST, PORT), DNSHandler)
    except:
        server = SocketServer.ThreadingUDPServer((HOST, PORT), DNSHandler)

    server.serve_forever()