端口映射(socket应用)
# coding=gb2312 import sys import time import socket import thread import subprocess ################################ interfaceName = "本地连接" portStart = 10000 portNumber = 500 ################################ def getNextIp(ip): t = [int(x) for x in ip.split(".")] assert len(t) == 4 t[3] += 1 for i in range(3, -1, -1): if t[i] > 255: assert i > 0 t[i] = 1 t[i - 1] += 1 else: break return ".".join([str(x) for x in t]) def print_with_lock(msg): lock.acquire() print msg lock.release() def server(listen_host, listen_port, target_host, target_port): print_with_lock("server started, %s, %s, %s, %s" % (listen_host, listen_port, target_host, target_port)) try: dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) dock_socket.bind((listen_host, listen_port)) dock_socket.listen(5) while True: client_socket, client_address = dock_socket.accept() print_with_lock("connection accepted, %s, %s, %s, %s" % (listen_host, listen_port, target_host, target_port)) server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.connect((target_host, target_port)) thread.start_new_thread(forward, (client_socket, server_socket, "client -> server" )) thread.start_new_thread(forward, (server_socket, client_socket, "server -> client" )) finally: thread.start_new_thread(server, (listen_host, listen_port, target_host, target_port)) def forward(source, destination, description): data = 'dummy' while data: data = source.recv(1024) if data: destination.sendall(data) else: source.shutdown(socket.SHUT_RD) destination.shutdown(socket.SHUT_WR) lock = thread.allocate_lock() # 启动代理线程 port = portStart ipin = "127.0.0.2" for i in range(0, portNumber): thread.start_new_thread(server, ("0.0.0.0", port, ipin, 23)) ipin = getNextIp(ipin) port += 1 while True: time.sleep(1.0)