Files
zlib-dl/test_mihomo_bounce.py
T
2026-03-31 18:18:35 +08:00

73 lines
2.0 KiB
Python

import subprocess
import time
import os
import urllib.request
from curl_cffi import requests
# We will read the first proxy from proxies.txt to really test it
proxy_str = ""
with open("proxies.txt") as f:
for line in f:
if "ss," in line:
proxy_str = line.strip()
break
parts = proxy_str.split("=", 1)
name = parts[0].strip()
cfg = parts[1].strip().split(",")
host = cfg[1].strip()
port = cfg[2].strip()
params = {}
for p in cfg[3:]:
if "=" in p:
k, v = p.split("=", 1)
params[k.strip()] = v.strip()
method = params.get("encrypt-method", "")
password = params.get("password", "")
obfs = params.get("obfs", "")
obfs_host = params.get("obfs-host", "")
def test_mihomo(use_en0):
port_local = 11111 if use_en0 else 11112
interface_cfg = "\n interface-name: en0" if use_en0 else ""
plugin_cfg = f"""
plugin: obfs
plugin-opts:
mode: {obfs}
host: {obfs_host}
""" if obfs else ""
yaml_cfg = f"""
mode: global
mixed-port: {port_local}
bind-address: '127.0.0.1'
dns:
enable: true
nameserver:
- 223.5.5.5
proxies:
- name: "test_proxy"
type: ss
server: "{host}"
port: {port}
cipher: "{method}"
password: "{password}"{interface_cfg}{plugin_cfg}
"""
with open(f"test_cfg_{port_local}.yaml", "w") as f: f.write(yaml_cfg)
proc = subprocess.Popen(["./.venv/bin/mihomo", "-f", f"test_cfg_{port_local}.yaml"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
time.sleep(2)
try:
prox = {"http": f"socks5://127.0.0.1:{port_local}", "https": f"socks5://127.0.0.1:{port_local}"}
resp = requests.get("http://httpbin.org/ip", proxies=prox, impersonate="chrome", timeout=5)
return resp.json()["origin"]
except Exception as e:
return f"Error: {e}"
finally:
proc.terminate()
proc.wait(timeout=2)
os.remove(f"test_cfg_{port_local}.yaml")
print("Without en0:", test_mihomo(False))
print("With en0:", test_mihomo(True))