initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user