kopia lustrzana https://github.com/sq5t/tnc-proxy
67 wiersze
1.8 KiB
Python
67 wiersze
1.8 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
# author: Tomasz SQ5T
|
|
|
|
import socket
|
|
import threading
|
|
|
|
listen_address = "127.0.0.1" # listen IP, "" == listen all
|
|
listen_port = 8002 # listen port
|
|
|
|
destination_address = "127.0.0.1" # connect to IP
|
|
destination_port = 8001 # connect to port
|
|
|
|
def cli_msg(conn):
|
|
while True:
|
|
try:
|
|
message = conn.recv(1024)
|
|
if message:
|
|
broadcast(message, conn)
|
|
else:
|
|
remove(conn)
|
|
return
|
|
except:
|
|
continue
|
|
|
|
# broadcast message to all connected clients
|
|
def broadcast(message, connection):
|
|
for clients in list_of_clients:
|
|
if clients!=connection:
|
|
try:
|
|
clients.send(message)
|
|
except:
|
|
clients.close()
|
|
remove(clients)
|
|
return
|
|
|
|
# remove connection
|
|
def remove(connection):
|
|
connection.close()
|
|
if connection in list_of_clients:
|
|
list_of_clients.remove(connection)
|
|
|
|
list_of_clients = []
|
|
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.connect((destination_address, destination_port))
|
|
list_of_clients.append(s)
|
|
main_connection = s
|
|
|
|
thread = threading.Thread(target=cli_msg, args=(s,))
|
|
thread.daemon = True
|
|
thread.start()
|
|
|
|
cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
cli.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
cli.bind((listen_address, listen_port)) # start listening
|
|
cli.listen(2) # max waiting connection
|
|
|
|
while True:
|
|
conn,address = cli.accept() # accept connection from client
|
|
conn.setblocking(1)
|
|
list_of_clients.append(conn) # add client to array of clients
|
|
thread_client = threading.Thread(target=cli_msg, args=(conn,))
|
|
thread_client.daemon = True
|
|
thread_client.start()
|