40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
|
import select
|
||
|
import socketserver
|
||
|
import sys
|
||
|
import threading
|
||
|
import time
|
||
|
|
||
|
|
||
|
class PortServer:
|
||
|
def __init__(self, port):
|
||
|
self.port = port
|
||
|
self.server = socketserver.ThreadingTCPServer(('0.0.0.0', port), self.handler)
|
||
|
self.server.daemon_threads = True
|
||
|
self.thread = threading.Thread(target=self.server.serve_forever,
|
||
|
name='Port %s Server' % port)
|
||
|
self.thread.daemon = True
|
||
|
self.thread.start()
|
||
|
|
||
|
|
||
|
def handler(self, request, address, server):
|
||
|
threading.current_thread().name = 'Port %s Handler' % self.port
|
||
|
rlist = [request]
|
||
|
echo = b''
|
||
|
while True:
|
||
|
r, w, _x = select.select(rlist, [request] if echo else [], [])
|
||
|
if r:
|
||
|
data = request.recv(1024)
|
||
|
if not data:
|
||
|
break
|
||
|
print(f"{self.port}: {data}\n", end='', flush=True)
|
||
|
echo += data
|
||
|
if w:
|
||
|
echo = echo[request.send(echo):]
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
ports = []
|
||
|
for port in sys.argv[1:]:
|
||
|
ports.append(PortServer(int(port)))
|
||
|
time.sleep(10 * 60)
|