* 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