用最短Python代码实现本地服务器与TCP代理转发

Mason
Mason
发布时间:2026-10-12| 3人浏览过
原创

本文提供基于 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'。

Python wsgiref 服务运行截图

搭建 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实用工具的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。