当前位置: 首页 > article >正文

【大前端】【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

 


http://www.kler.cn/a/580531.html

相关文章:

  • Yashan DB 存储结构
  • python语言API接口采集电商平台数据,json数据格式
  • SpringBoot全栈开发:从数据库到Markdown文件导出的终极实践指南
  • 并发服务器的实现
  • 虚幻C++插件胚胎级入门 | Slate Widget开发
  • 【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
  • 机器学习(李宏毅)——Auto-Encoder
  • 基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】
  • git大文件传输报错
  • pdf修改内容:分享5款好用的工具
  • STM32的Systick定时器的作用
  • 解决电脑问题(7)——软件问题
  • Django 模型的逆向工程
  • Django 初始化导入数据详解
  • 【学习方法二】
  • 手写识别革命:Manus AI如何攻克多语言混合识别难题(一)
  • 【Linux】36.简单的TCP网络程序
  • Qt无法抓取鼠标键盘事件
  • 用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息
  • Jeinkins配置sonarqube