| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import httpx
- import time
- import json
- import uuid
- import logging
- import websockets
- from typing import Optional
- from websockets import WebSocketCommonProtocol
- # 配置日志
- logging.basicConfig(level=logging.INFO)
- # Clash API 的基础 URL
- CLASH_API_BASE_URL = "http://localhost:17888/api"
- # 服务的基础 URL 和端口
- SERVER_HOSTNAME = "proxy.wynd.network"
- SERVER_PORT = 4444
- SERVER_URL = f"wss://{SERVER_HOSTNAME}:{SERVER_PORT}/"
- TEST_USER_ID = '2pcRp86m1r76nSzdtGy1DNpXjrF'
- PROXY_URL = "http://127.0.0.1:17890" # 代理地址
- def get_all_proxies():
- """获取Clash中所有可用的代理"""
- url = f"{CLASH_API_BASE_URL}/proxies"
- try:
- response = httpx.get(url)
- response.raise_for_status() # 检查请求是否成功
- proxies = response.json()
- logging.info("Available proxies:")
- for proxy_name, proxy_info in proxies['proxies'].items():
- logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
- return list(proxies['proxies'].keys())
- except Exception as e:
- logging.error(f"Failed to get proxies: {e}")
- return []
- def switch_proxy(proxy_name):
- """切换到指定的代理"""
- url = f"{CLASH_API_BASE_URL}/proxies/GLOBAL"
- data = {"name": proxy_name}
- response = httpx.put(url, json=data)
- if response.status_code == 204:
- logging.info(f"Switched to proxy: {proxy_name}")
- else:
- logging.error(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
- def test_grassio(proxy_name):
- pass
- def main():
- # 获取所有代理
- proxies = get_all_proxies()
- if proxies:
- logging.info(f"Found {len(proxies)} proxies.")
- ok_proxy_list = []
- for proxy_name in proxies:
- if proxy_name in ["DIRECT", "REJECT", "GLOBAL"]:
- continue
- # 切换到指定的代理
- switch_proxy(proxy_name)
- # 暂停一段时间,避免频繁切换
- time.sleep(0.5)
- # 测试通过代理连接 grassio 服务
- result = test_grassio(proxy_name)
- if result:
- ok_proxy_list.append(proxy_name)
- for proxy_name in ok_proxy_list:
- logging.info(f"Proxy {proxy_name} is OK.")
- else:
- logging.info("No proxies found. Exiting.")
- if __name__ == "__main__":
- main()
|