Created
November 3, 2019 18:49
-
-
Save mmmulani/21152ea8614fc616bd4146b0579cdb6f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import time, threading, socket, SocketServer, BaseHTTPServer, SimpleHTTPServer | |
class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): | |
def do_GET(self): | |
header = 'X-Forwarded-For' | |
ip_address = self.headers[header] | |
if header is not None: | |
reversed_dns = socket.gethostbyaddr(ip_address) | |
print 'Serving for %s (%s)' % (ip_address, reversed_dns[0]) | |
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) | |
# Create ONE socket. | |
addr = ('', 12384) | |
sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) | |
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
sock.bind(addr) | |
sock.listen(5) | |
# Launch 100 listener threads. | |
class Thread(threading.Thread): | |
def __init__(self, i): | |
threading.Thread.__init__(self) | |
self.i = i | |
self.daemon = True | |
self.start() | |
def run(self): | |
httpd = BaseHTTPServer.HTTPServer(addr, Handler, False) | |
# Prevent the HTTP server from re-binding every handler. | |
# https://stackoverflow.com/questions/46210672/ | |
httpd.socket = sock | |
httpd.server_bind = self.server_close = lambda self: None | |
httpd.serve_forever() | |
[Thread(i) for i in range(20)] | |
time.sleep(9e9) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment