Skip to content

Instantly share code, notes, and snippets.

@dnase
Created December 16, 2014 21:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dnase/fad461442976e4d921cf to your computer and use it in GitHub Desktop.
Save dnase/fad461442976e4d921cf to your computer and use it in GitHub Desktop.
#! /usr/bin/python
import sys
import signal
from json import dumps, loads
from platform import platform
from urlparse import urlparse
from socket import gethostbyaddr
from SocketServer import TCPServer, ForkingTCPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
#need to run as root for ports lower than 1024, usually
PORT = 8000
try:
PRE_LOOKUP = loads(open('cached_lookup', 'r').read())
except:
PRE_LOOKUP = {}
SE_KEYWORDS = ['google', 'yahoo', 'msn', 'bing']
class Host():
def __init__(self, ip):
self.ip = ip
self.name = gethostbyaddr(ip)[0]
class Handler(SimpleHTTPRequestHandler):
def do_GET(self):
try:
# index 4 is always querystring
query_string = urlparse(self.path)[4]
# we don't care what it's called, just the first value passed
ip = query_string.split('=')[1]
try:
hostname = PRE_LOOKUP[ip].name
except KeyError:
hn = Host(ip)
PRE_LOOKUP[ip] = hn
hostname = hn.name
print str(PRE_LOOKUP)
self.wfile.write(hostname)
except:
pass
def signal_handler(signal, frame):
fp = open('cached_lookup', 'w+')
fp.write(dumps(PRE_LOOKUP))
fp.close()
sys.exit(0)
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
if len(sys.argv) > 1:
PORT = int(sys.argv[1])
# Windows doesn't support process forking
if 'Windows' in platform():
httpd = TCPServer(("", PORT), Handler)
else:
httpd = ForkingTCPServer(("", PORT), Handler)
print "Serving HTTP at port: %i" % PORT
httpd.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment