如题,端口映射拟将0.0.0.0的8888端口映射到11111去,使访问11111端口等价于访问8888端口

    1. """
    2. https://www.xuebuyuan.com/3229120.html
    3. Python Proxy Server
    4. # TODO: BUG IN CLOSE @LINE45
    5. """
    6. import socket
    7. import select
    8. import sys
    9. to_addr = ('0.0.0.0', 11111)
    10. class Proxy:
    11. def __init__(self, addr):
    12. self.proxy = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13. self.proxy.bind(addr)
    14. self.proxy.listen(10)
    15. self.inputs = [self.proxy]
    16. self.route = {}
    17. def serve_forever(self):
    18. print('proxy listen...')
    19. while 1:
    20. readable, _, _ = select.select(self.inputs, [], [])
    21. for self.sock in readable:
    22. if self.sock == self.proxy:
    23. self.on_join()
    24. else:
    25. data = self.sock.recv(8096)
    26. if not data:
    27. self.on_quit()
    28. else:
    29. self.route[self.sock].send(data)
    30. def on_join(self):
    31. client, addr = self.proxy.accept()
    32. print(addr, 'connect')
    33. forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    34. forward.connect(to_addr)
    35. self.inputs += [client, forward]
    36. self.route[client] = forward
    37. self.route[forward] = client
    38. def on_quit(self):
    39. for s in self.sock, self.route[self.sock]:
    40. self.inputs.remove(s)
    41. del self.route[s]
    42. s.close()
    43. if __name__ == '__main__':
    44. try:
    45. Proxy(('', 8888)).serve_forever()
    46. except KeyboardInterrupt:
    47. sys.exit(1)