【大前端】【Android】whistle配置Android手机代理脚本

Android配置whistle手机代理,为了避免频繁自己手动去WiFi代理输入私有IP地址,特地建了一个Python脚本来帮助一键配置好代理,解除代理。

原始配置流程手续:

  1. 需要打开http://127.0.0.1:8899/ 查看whistle的IP和端口号
  2. 需要打开手机WiFi代理,输入上述的IP和端口号
  3. 如果清除代理,需要再次打开WiFi代理,取消代理

现在的配置流程手续:

  1. 直接输入下述命令即可设置代理
    python proxy.py set
  2. 直接输入下述命令即可清除代理
python proxy.py clear

proxy.py文件代码如下,主要核心也就是用Python模拟发送adb命令去控制代理。省掉了自己打开WiFi输入IP地址的过程。 

import subprocess
import re
import sys

def get_whistle_ip_port():
    try:
        # 获取 whistle 的状态输出
        result = subprocess.run(['w2', 'status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output = result.stdout.decode('utf-8').strip()
        
        # 打印原始输出以便调试
        print("Whistle output:", output)
        
        # 使用正则表达式从输出中提取非127.0.0.1的IP地址和端口号
        ip_match = re.search(r'http://(?!127\.0\.0\.1)([\d.]+):(\d+)/', output)
        if ip_match:
            ip = ip_match.group(1)
            port = ip_match.group(2)
            return ip, port
        else:
            print("Could not parse external IP and port from whistle output.")
        
    except Exception as e:
        print(f"Failed to get whistle config: {e}")
    
    return None, None

def set_android_wifi_proxy(ip, port):
    try:
        # 通过ADB连接设备并设置WiFi代理
        subprocess.run(['adb', 'shell', 'settings', 'put', 'global', 'http_proxy', f"{ip}:{port}"])
        print(f"Proxy set to {ip}:{port} successfully.")
    except Exception as e:
        print(f"Failed to set proxy on Android device: {e}")

def clear_android_wifi_proxy():
    try:
        # 通过ADB连接设备并清除WiFi代理设置
        subprocess.run(['adb', 'shell', 'settings', 'put', 'global', 'http_proxy', ':0'])
        print("Proxy cleared successfully.")
    except Exception as e:
        print(f"Failed to clear proxy on Android device: {e}")

def main(action):
    if action == 'set':
        ip, port = get_whistle_ip_port()
        if ip and port:
            set_android_wifi_proxy(ip, port)
        else:
            print("Could not retrieve whistle IP and port.")
    elif action == 'clear':
        clear_android_wifi_proxy()
    else:
        print("Invalid action. Use 'set' to set proxy or 'clear' to clear proxy.")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py [set|clear]")
    else:
        main(sys.argv[1])

python proxy.py set

运行之后,如下所示: 

python proxy.py clear

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值