现在有两台windows电脑 其中A电脑拥有测试环境的访问权限,B电脑有测试环境和生产环境的访问权限,由于经常需要用到生产的访问权限所以希望在B电脑搭建一个代理服务,在A电脑中设置代理电脑为B的ip,所有流量都由B进行转发访问。

项目介绍

Proxy.py 是一个轻量级、高性能的 HTTP 代理服务器,旨在提供一个快速、可扩展的代理解决方案。它支持多种功能,如 TLS 拦截、DNS-over-HTTPS、反向代理、Web 服务器框架等。Proxy.py 的设计目标是成为一个零依赖、易于集成和扩展的代理服务器,适用于各种场景,包括开发、测试和生产环境。

Github

https://github.com/abhinavsingh/proxy.py

安装

pip install proxy.py

启动代理服务器

proxy --hostname 0.0.0.0 --port 9999

编辑一键启动脚本

Start_proxy.py

import subprocess

def start(port):
    subprocess.Popen(['cmd','/c',f'proxy --hostname 0.0.0.0 --port {port}'],creationflags=subprocess.CREATE_NO_WINDOW)

if __name__ == '__main__':
    start(9999)

Stop_proxy.py

import subprocess
import re


def kill_proxy(port):
    # 执行netstat命令获取进程信息
    cmd = f"netstat -ano | findstr 0.0.0.0:{port}"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)

    # 正则匹配PID
    pid_pattern = re.compile(r"LISTENING\s+(\d+)")
    pids = pid_pattern.findall(result.stdout)

    if not pids:
        print(f"未找到监听0.0.0.0:{port}的进程")
        return

    # 终止所有匹配的进程
    for pid in set(pids):  # 去重
        try:
            subprocess.run(f"taskkill /F /T /PID {pid}", shell=True, check=True)
            print(f"已终止PID为{pid}的进程")
        except subprocess.CalledProcessError as e:
            print(f"终止进程{pid}失败: {e}")


if __name__ == "__main__":
    kill_proxy(9999)

编译二进制执行脚本

将源码编译成二进制可以有效防止串改或发现真正用途,编译后会在__pycache__目录下生成pyc文件

import py_compile
py_compile.compile('start_proxy.py')
py_compile.compile('stop_proxy.py')

Start.bat

python start_proxy.pyc

Stop.bat

python stop_proxy.pyc