Created
February 6, 2014 12:13
-
-
Save sj26/8842998 to your computer and use it in GitHub Desktop.
Fake NNCS server
This file contains 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
#!/usr/bin/env python | |
import sys | |
import socket | |
import select | |
import signal | |
from Debug import dinit, dprint | |
def close_listeners(listeners): | |
for listener in listeners: | |
try: | |
listener.close() | |
except Exception, exception: | |
dprint(__name__, 0, "Failed closing listener: {0}: {1}", listener, exception) | |
def Run(listen_ip="0.0.0.0", listen_ports=["10025", "33334"]): | |
dinit(__name__, {}) # init logging | |
listeners = [] | |
for listen_port in listen_ports: | |
try: | |
listener = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
listener.bind((listen_ip, int(listen_port))) | |
listeners.append(listener) | |
except Exception, exception: | |
dprint(__name__, 0, "Failed to create dgram socket {0}:{1}: {2}", listen_ip, listen_port, exception) | |
close_listeners(listeners) | |
sys.exit(1) | |
dprint(__name__, 0, "***") | |
dprint(__name__, 0, "NNCSServer: Swallowing NNCS on {0} ports {1}.", listen_ip, listen_ports) | |
dprint(__name__, 0, "***") | |
try: | |
while True: | |
try: | |
(readers, _, _) = select.select(listeners, (), (), 5.0) | |
for reader in readers: | |
data, addr = reader.recvfrom(1024) | |
dprint(__name__, 1, "NNCS request received from {0} to {1}", addr, reader.getsockname()) | |
if data == "\0" * 16: | |
dprint(__name__, 1, "Swallowing NULL bytes") | |
elif data == "\0" * 2 + "\0e" + "\0" * 12: | |
dprint(__name__, 1, "Swallowing NULL-padded '\\0e' byte") | |
elif data == "\0" * 2 + "\0f" + "\0" * 12: | |
dprint(__name__, 1, "Swallowing NULL-padded '\\0f' byte") | |
else: | |
dprint(__name__, 0, "Unknown packet: {1}", addr, repr(data)) | |
except socket.timeout: | |
pass | |
except socket.error as exception: | |
dprint(__name__, 1, "Warning: NNCS error ({0}): {1}", exception.errno, exception.strerror) | |
except KeyboardInterrupt: | |
signal.signal(signal.SIGINT, signal.SIG_IGN) | |
dprint(__name__, 0, "^C received.") | |
finally: | |
dprint(__name__, 0, "Shutting down.") | |
close_listeners(listeners) | |
if __name__ == "__main__": | |
Run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment