-
-
Save Stealthii/7e5990f45423a841448ce2d673281fd7 to your computer and use it in GitHub Desktop.
Fake NNCS server
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
#!/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