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

打印 上一主题 下一主题

主题 1013|帖子 1013|积分 3039

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

  • 必要打开http://127.0.0.1:8899/ 检察whistle的IP和端标语
  • 必要打开手机WiFi代理,输入上述的IP和端标语
  • 假如清除代理,必要再次打开WiFi代理,取消代理
现在的配置流程手续:

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

proxy.py文件代码如下,紧张核心也就是用Python模仿发送adb命令去控制代理。省掉了自己打开WiFi输入IP地址的过程。 
  
  1. import subprocess
  2. import re
  3. import sys
  4. def get_whistle_ip_port():
  5.     try:
  6.         # 获取 whistle 的状态输出
  7.         result = subprocess.run(['w2', 'status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  8.         output = result.stdout.decode('utf-8').strip()
  9.         
  10.         # 打印原始输出以便调试
  11.         print("Whistle output:", output)
  12.         
  13.         # 使用正则表达式从输出中提取非127.0.0.1的IP地址和端口号
  14.         ip_match = re.search(r'http://(?!127\.0\.0\.1)([\d.]+):(\d+)/', output)
  15.         if ip_match:
  16.             ip = ip_match.group(1)
  17.             port = ip_match.group(2)
  18.             return ip, port
  19.         else:
  20.             print("Could not parse external IP and port from whistle output.")
  21.         
  22.     except Exception as e:
  23.         print(f"Failed to get whistle config: {e}")
  24.    
  25.     return None, None
  26. def set_android_wifi_proxy(ip, port):
  27.     try:
  28.         # 通过ADB连接设备并设置WiFi代理
  29.         subprocess.run(['adb', 'shell', 'settings', 'put', 'global', 'http_proxy', f"{ip}:{port}"])
  30.         print(f"Proxy set to {ip}:{port} successfully.")
  31.     except Exception as e:
  32.         print(f"Failed to set proxy on Android device: {e}")
  33. def clear_android_wifi_proxy():
  34.     try:
  35.         # 通过ADB连接设备并清除WiFi代理设置
  36.         subprocess.run(['adb', 'shell', 'settings', 'put', 'global', 'http_proxy', ':0'])
  37.         print("Proxy cleared successfully.")
  38.     except Exception as e:
  39.         print(f"Failed to clear proxy on Android device: {e}")
  40. def main(action):
  41.     if action == 'set':
  42.         ip, port = get_whistle_ip_port()
  43.         if ip and port:
  44.             set_android_wifi_proxy(ip, port)
  45.         else:
  46.             print("Could not retrieve whistle IP and port.")
  47.     elif action == 'clear':
  48.         clear_android_wifi_proxy()
  49.     else:
  50.         print("Invalid action. Use 'set' to set proxy or 'clear' to clear proxy.")
  51. if __name__ == "__main__":
  52.     if len(sys.argv) != 2:
  53.         print("Usage: python script.py [set|clear]")
  54.     else:
  55.         main(sys.argv[1])
复制代码

  
  1. python proxy.py set
复制代码
运行之后,如下所示: 


  1. python proxy.py clear
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表