用最短Python代码实现本地服务器与TCP代理转发
本文提供基于 Python 标准库构建最简 HTTP 服务与 TCP 数据转发代理的完整方案。通过 wsgiref 一键监听端口响应请求,利用 socket 结合 select 多路复用实现免 SSH 的内网穿透直连。包含可调参数、连接映射原理及异常处理,适用于快速搭建测试环境或临时打通受限网络通信。
构建极简 HTTP 服务
Python 自带轻量级 Web 服务器能力,无需引入 Flask 或 Django 等第三方框架,直接使用标准库 wsgiref 即可在数行代码内拉起监听端口。服务器 默认遵循 WSGI 规范,接收到 GET 请求后返回指定状态码与文本响应。
from wsgiref.simple_server import make_server
def simple_app(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return [b'Hello world!\n']
httpd = make_server('', 80, simple_app)
print('服务已启动,访问 http://localhost:80/')
httpd.serve_forever()运行脚本后,命令行将显示服务就绪提示,此时浏览器或 curl 请求 http://127.0.0.1:80 即可看到返回值。监听地址留空表示绑定本机所有网卡接口,如需限制访问权限可改为 '127.0.0.1'。

搭建 TCP 数据转发代理
当内网应用(如数据库、远程桌面或特定业务端口)未开放公网访问,且缺乏 ssh -L 端口转发权限时,可自建 代理服务器 作为中转节点。其核心原理是建立两条 Socket 链路:Client → Proxy → Forward,并通过字典记录双向映射关系,配合 select 实现非阻塞多路复用,将接收到的原始数据包透明透传给另一端。
import socket
import select
import sys
TO_ADDR = ('目标内网IP', 目标端口)
class Proxy:
def __init__(self, bind_addr):
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server.bind(bind_addr)
self.server.listen(10)
self.inputs = [self.server]
self.route = {}
def serve_forever(self):
print('代理服务已启动,等待连接...')
while True:
readable, _, _ = select.select(self.inputs, [], [])
for sock in readable:
if sock == self.server:
self._handle_client(sock)
else:
self._transfer_data(sock)
def _handle_client(self, server_sock):
client, addr = server_sock.accept()
forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
forward.connect(TO_ADDR)
except Exception as e:
print(f'转发目标连接失败: {e}')
return
self.inputs.extend([client, forward])
self.route[client] = forward
self.route[forward] = client
print(f'已建立连接映射: {addr} <-> {TO_ADDR}')
def _transfer_data(self, sock):
data = sock.recv(8192)
if not data:
self._close_connection(sock)
else:
peer = self.route.get(sock)
if peer and not peer.closed:
peer.send(data)
def _close_connection(self, sock):
peer = self.route.pop(sock, None)
self.inputs.remove(sock)
if peer:
self.inputs.remove(peer)
peer.close()
sock.close()
print('连接已关闭')
if __name__ == '__main__':
try:
Proxy(('0.0.0.0', 8080)).serve_forever()
except KeyboardInterrupt:
print('\n代理退出')
sys.exit(0)将代码中的 TO_ADDR 修改为真实的内网服务端地址,运行后代理将在本地 8080 端口监听。任何发往该端口的流量都会被自动拆分、路由并原封不动地推送到目标机器,完成网络隔离下的点对点通信。

运行验证与注意事项
执行脚本后,可通过终端日志确认 数据转发 状态。新建连接时会打印客户端地址与目标地址的映射关系,断开时自动清理 route 字典与监听队列,防止句柄泄漏。
- 端口占用处理:若提示 Address already in use,检查是否有残留进程,或重启系统释放
8080端口。 - 防火墙放行:确保主机安全策略允许
8080入站及目标端口出站流量。 - 并发性能:当前逻辑采用单线程同步模型,适合调试与低频连接;高并发场景建议迁移至
asyncio架构。
总结
借助 Python 内置的网络模块,开发者能够以极低的门槛编写出功能完备的基础服务器与网关代理。代码无需复杂的环境配置,聚焦于端口监听与报文重定向的核心逻辑,有效解决了内网直连受限的实际痛点。
以上就是用最短Python代码实现本地服务器与TCP代理转发的详细内容,更多关于网络编程与Python实用工具的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













