73 lines
2.0 KiB
Python
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))
|