Skip to content

Instantly share code, notes, and snippets.

@MaxNad
Created June 13, 2019 18:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MaxNad/949fc0fd38e2a55861729e05e9defcdc to your computer and use it in GitHub Desktop.
Save MaxNad/949fc0fd38e2a55861729e05e9defcdc to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
from __future__ import print_function
from dnslib import RR,QTYPE,RCODE,TXT,parse_time
from dnslib.label import DNSLabel
from dnslib.server import DNSServer,DNSHandler,BaseResolver,DNSLogger
class ShellResolver(BaseResolver):
def __init__(self,ttl,ans):
self.ttl = parse_time(ttl)
self.ans = ans
def resolve(self,request,handler):
reply = request.reply()
qname = request.q.qname
label = str(qname)
counter = label[0:label.index(".")]
try:
counter = int(counter)
if counter >= len(ans):
reply.add_answer(RR(qname,QTYPE.TXT,ttl=self.ttl,
rdata=TXT("x00x00x00x00x00")))
else:
reply.add_answer(RR(qname,QTYPE.TXT,ttl=self.ttl,
rdata=TXT(ans[counter])))
except ValueError:
reply.add_answer(RR(qname,QTYPE.TXT,ttl=self.ttl,
rdata=TXT("x00x00x00x00x00")))
return reply
if __name__ == '__main__':
import argparse,sys,time
p = argparse.ArgumentParser(description="Shell DNS Resolver")
p.add_argument("--ttl","-t",default="60s",
metavar="<ttl>",
help="Response TTL (default: 60s)")
p.add_argument("--port","-p",type=int,default=53,
metavar="<port>",
help="Server port (default:53)")
p.add_argument("--address","-a",default="",
metavar="<address>",
help="Listen address (default:all)")
p.add_argument("--file",required=True,
help="Filename to send")
args = p.parse_args()
ans = []
with open(args.file) as f:
while True:
chars = f.read(254)
if not chars:
break
ans.append(chars)
print(ans)
resolver = ShellResolver(args.ttl, ans)
logger = DNSLogger("request,reply,truncated,error",False)
udp_server = DNSServer(resolver,
port=args.port,
address=args.address,
logger=logger)
udp_server.start_thread()
while udp_server.isAlive():
time.sleep(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment