TCPEchoServer in Python

发布于:2025-02-25 ⋅ 阅读:(13) ⋅ 点赞:(0)

* tcp_echo2.py

#!/usr/bin/pyton

import sys
import socket
import threading

HOST_IPV4 = "0.0.0.0"
HOST_IPV6 = "::"
DEFAULT_PORT = 22881

# Read port from command-line argument
if len(sys.argv) > 1:
    try:
        PORT = int(sys.argv[1])
        if PORT < 1 or PORT > 65535:
            raise ValueError("Port number out of range")
    except ValueError:
        print("Invalid port number. Please provide a valid port between 1 and 65535.")
        sys.exit(1)
else:
    PORT = DEFAULT_PORT

def handle_client(client_socket, client_address):
    print("Connection established with", client_address)
    data = client_socket.recv(1024)
    while data:
        print("Received:", data)
        client_socket.sendall(data)
        data = client_socket.recv(1024)
    print("EOF or client disconnect detected.")
    client_socket.close()
    print("Connection closed.")

def start_server(host, family):
    server_socket = socket.socket(family, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind((host, PORT))
    server_socket.listen(5)
    print("Listening on {}:{}".format(host, PORT))

    while True:
        client_socket, client_address = server_socket.accept()
        threading.Thread(target=handle_client, args=(client_socket, client_address)).start()

# Start both IPv4 and IPv6 servers
# threading.Thread(target=start_server, args=(HOST_IPV4, socket.AF_INET)).start()
threading.Thread(target=start_server, args=(HOST_IPV6, socket.AF_INET6)).start()

iptables

sudo /sbin/iptables -L INPUT -v --line-numbers
sudo /sbin/iptables -I INPUT 10 -p tcp --dport 22881 -j ACCEPT
sudo /sbin/iptables -L OUTPUT -v --line-numbers
sudo /sbin/iptables -I OUTPUT 8 -p tcp --sport 22881 -j ACCEPT

sudo /sbin/ip6tables -L INPUT -v --line-numbers
sudo /sbin/ip6tables -I INPUT 4 -p tcp --dport 22881 -j ACCEPT
sudo /sbin/ip6tables -L OUTPUT -v --line-numbers
sudo /sbin/ip6tables -I OUTPUT 2 -p tcp --sport 22881 -j ACCEPT

sudo netfilter-persistent save

test:

nc -v YOUR_IPV6_ADDRESS 22881