Skip to content

Instantly share code, notes, and snippets.

@sj26
Created February 6, 2014 12:13
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save sj26/8842998 to your computer and use it in GitHub Desktop.
Save sj26/8842998 to your computer and use it in GitHub Desktop.
Fake NNCS server
#!/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