You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python运行时以仅允许向localhost等指定地址端口发起TCP连接

实现方案:通过猴子补丁拦截socket连接

Python 中所有 TCP 网络请求最终都会调用 socket.socket.connect() 方法,对该方法做包装添加白名单校验,即可实现指定地址/端口的放行限制,该方案对所有基于 socket 实现的第三方库(包括请求库、数据库驱动等)都生效。

完整实现代码

import socket
from functools import wraps

# 白名单配置规则:(允许的主机名/IP, 允许的端口),端口填None表示允许该主机的所有端口
ALLOWED_CONNECTIONS = [
    ("localhost", 3306),  # 放行本地MySQL连接
    ("127.0.0.1", 5432), # 放行本地PostgreSQL连接
    ("::1", None),        # 放行IPv6本地回环的所有端口
]

# 备份原生connect方法
_original_connect = socket.socket.connect

@wraps(_original_connect)
def _wrapped_connect(self, address):
    host, port = address
    allowed = False
    for allow_host, allow_port in ALLOWED_CONNECTIONS:
        if host == allow_host and (allow_port is None or port == allow_port):
            allowed = True
            break
    if not allowed:
        raise ConnectionRefusedError(f"禁止连接到非白名单地址 {host}:{port}")
    return _original_connect(self, address)

# 替换原生方法实现拦截
socket.socket.connect = _wrapped_connect

使用说明

  • 按需修改 ALLOWED_CONNECTIONS 配置即可自定义放行的地址和端口,支持本地回环、自定义内网IP等任意主机
  • 如果需要临时关闭拦截,将 socket.socket.connect 重新赋值为之前备份的 _original_connect 即可
  • 单元测试场景可将该补丁逻辑放到测试框架的全局前置钩子中(比如pytest的pytest_sessionstart),仅在测试运行时生效,不影响生产代码。

内容的提问来源于stack exchange,提问作者warvariuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 09:24:04