android-为手机设置全局代理

【可行】adb修改手机代理方式 设置全局命令 adb shell settings put global http_proxy 代理IP地址:端口号 因为设置的是全局代理,不管连接的是哪个wifi,都是会通过这个代理转发请求。所以在抓包完之后相应的需要移除代理信息。 adb shell settings delete global http_proxy adb shell settings delete global global_http_proxy_host adb shell settings delete global glob 阅读详情

有这么一个需求,需要给手机设置全局代理。百度到的结果都是设置后,如果需要清除代理的话,需要重启手机,这里使用的方式是不需要重启的方式后

 实现方式如下:

设置代理:

String[] strings = {"settings put global http_proxy " + ip + ":" + port};
                    ShellUtils.CommandResult commandResult2 = ShellUtils.execCmd(strings, false, true);

直接使用adb shell命令设置,需要权限

<uses-permission android:name="android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY" />

    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

使用该权限时,需要给应用系统签名

清除代理:

String[] strings = {"settings put global http_proxy :0"};
ShellUtils.CommandResult commandResult2 = ShellUtils.execCmd(strings, false, true);

附上shellutiils代码

package com.sh.util.downloadlib.util;

import android.text.TextUtils;
import android.util.Log;

import java.io.BufferedReader;
import java.io.Closeable;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

/**
 * <pre>
 *     author: carden
 * </pre>
 */
public final class ShellUtils {

    private ShellUtils() {
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    /**
     * 是否是在root下执行命令
     *
     * @param command 命令
     * @param isRoot  是否需要root权限执行
     * @return CommandResult
     */
    public static CommandResult execCmd(String command, boolean isRoot) {
        return execCmd(new String[]{command}, isRoot, true);
    }

    /**
     * 是否是在root下执行命令
     *
     * @param commands 多条命令链表
     * @param isRoot   是否需要root权限执行
     * @return CommandResult
     */
    public static CommandResult execCmd(List<String> commands, boolean isRoot) {
        return execCmd(commands == null ? null : commands.toArray(new String[]{}), isRoot, true);
    }

    /**
     * 是否是在root下执行命令
     *
     * @param commands 多条命令数组
     * @param isRoot   是否需要root权限执行
     * @return CommandResult
     */
    public static CommandResult execCmd(String[] commands, boolean isRoot) {
        return execCmd(commands, isRoot, true);
    }

    /**
     * 是否是在root下执行命令
     *
     * @param command         命令
     * @param isRoot          是否需要root权限执行
     * @param isNeedResultMsg 是否需要结果消息
     * @return CommandResult
     */
    public static CommandResult execCmd(String command, boolean isRoot, boolean isNeedResultMsg) {
        return execCmd(new String[]{command}, isRoot, isNeedResultMsg);
    }

    /**
     * 是否是在root下执行命令
     *
     * @param commands        命令链表
     * @param isRoot          是否需要root权限执行
     * @param isNeedResultMsg 是否需要结果消息
     * @return CommandResult
     */
    public static CommandResult execCmd(List<String> commands, boolean isRoot, boolean isNeedResultMsg) {
        return execCmd(commands == null ? null : commands.toArray(new String[]{}), isRoot, isNeedResultMsg);
    }

    /**
     * 是否是在root下执行命令
     *
     * @param commands        命令数组
     * @param isRoot          是否需要root权限执行
     * @param isNeedResultMsg 是否需要结果消息
     * @return CommandResult
     */
    public static CommandResult execCmd(String[] commands, boolean isRoot, boolean isNeedResultMsg) {
        int result = -1;
        if (commands == null || commands.length == 0) {
            return new CommandResult(result, null, null);
        }

        Process process = null;
        BufferedReader successResult = null;
        BufferedReader errorResult = null;
        StringBuilder successMsg = null;
        StringBuilder errorMsg = null;
        DataOutputStream os = null;
        try {
            process = Runtime.getRuntime().exec(isRoot ? "su" : "sh");
            os = new DataOutputStream(process.getOutputStream());
            for (String command : commands) {
                if (command == null) continue;
                os.write(command.getBytes());
                os.writeBytes("\n");
                os.flush();
            }
            os.writeBytes("exit\n");
            os.flush();
            result = process.waitFor();
            if (isNeedResultMsg) {
                successMsg = new StringBuilder();
                errorMsg = new StringBuilder();
                successResult = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
                errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream(), "UTF-8"));
                String s;
                while ((s = successResult.readLine()) != null) {
                    successMsg.append(s);
                }
                while ((s = errorResult.readLine()) != null) {
                    errorMsg.append(s);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("***",e.getMessage());
        } finally {
          closeIO(os, successResult, errorResult);
            if (process != null) {
                process.destroy();
            }
        }
        return new CommandResult(
                result,
                successMsg == null ? null : successMsg.toString(),
                errorMsg == null ? null : errorMsg.toString()
        );
    }
    public static void closeIO(Closeable... closeables) {
        if (closeables == null) return;
        for (Closeable closeable : closeables) {
            if (closeable != null) {
                try {
                    closeable.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * 返回的命令结果
     */
    public static class CommandResult {
        /**
         * 结果码
         **/
        public int    result;
        /**
         * 成功信息
         **/
        public String successMsg;
        /**
         * 错误信息
         **/
        public String errorMsg;

        public CommandResult(int result, String successMsg, String errorMsg) {
            this.result = result;
            this.successMsg = successMsg;
            this.errorMsg = errorMsg;
        }

        @Override
        public String toString() {
            return "CommandResult{" +
                    "result=" + result +
                    ", successMsg='" + successMsg + '\'' +
                    ", errorMsg='" + errorMsg + '\'' +
                    '}';
        }
    }

    public static String[] getHideShell(String shells) {

        String[] c_shells = null;
        if (!TextUtils.isEmpty(shells)) {
            return null;
        }
        if (!shells.contains("#")) {
            c_shells = new String[1];
            for (int i = 0; i < c_shells.length; i++) {
                c_shells[i] = shells;
            }
            return c_shells;
        } else {
            String strs[] = shells.split("#");
            c_shells = new String[strs.length];
            for (int i = 0; i < strs.length; i++) {
                c_shells[i] =strs[i];
            }
            return c_shells;
        }

    }
}

 

thanks

 

【Android】在Android中设置网络代理:一文详解 在移动设备上,特别是Android平台,设置网络代理是一种常见的需求,可以通过网络代理实现对网络请求和响应的拦截和修改。本文将详细介绍在Android设备上通过adb命令设置全局HTTP代理的方法,并解释这个操作的实际用途以及在开发和测试中的应用场景。 阅读详情

相关推荐

从零掌握HTTPS抓包:Fiddler电脑手机与雷电模拟器实战全解

在开发调试与网络问题排查中,HTTP/HTTPS协议是绕不开的基础。明文传输的HTTP直接可见,而HTTPS通过TLS加密,普通抓包工具只能看到密文。要解开HTTPS,核心是中间人代理原理:抓包工具生成根证书并获客户端信任,从而在两端建立独立连接,实现解密。掌握这一原理,Fiddler、Charles、Wireshark等工具就能各司其职。技术价值在于,快速定位接口异常、鉴权失败、证书校验等实际工程问题。应用场景覆盖电脑端代理设置、手机WiFi代理与证书安装,以及雷电模拟器的系统证书推送等。若Android

weixin_28683391的博客 144

Android设备设置代理的两种方法

本文将介绍两种给给android设备设置网络代理的方法,一种是直接在网络设置中操作,另一种是通过adb指令操作 第一种最常用的通过设置页面操作(此处以夜神模拟器为例讲解,其他设备操作方式基本类似) 操作路径:设置-->WLAN,选中网络长按(不同设备操作方式不一样,有些事点击更多按钮)-->修改网络-->高级选项,将代理选项设置为手动,在代理服务器主机名处填写你要设置的代理服...

saddyyun的博客 7万+

【实战】利用adb命令快速切换手机代理配置

本文详细介绍了如何利用adb命令快速切换手机代理配置,实现高效网络调试。通过两种核心方法——全局代理设置与第三方工具精细化管理,开发者可以一键切换或清除代理,大幅提升移动端开发、测试和抓包效率,告别繁琐的手动操作。

weixin_29207149的博客 292

Android Java反射与Proxy动态代理详解与使用基础篇(一)

Java Reflection功能非常强大,并且非常有用,比如:获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等获取任意对象的属性,并且能改变对象的属性调用任意对象的方法判断任意一个对象所属的类实例化任意一个类的对象通过反射我们可以实现动态装配,降低代码的耦合度,动态代理等。在JDK中,主要由以下类来实现Java反射机制,这些类(除了第一个)都位于java.lang.reflect包中Class类:代表一个类,位于java.lang包下。

3212

Windows下通过USB网络共享实现Android手机抓包的完整方案

抓包是网络调试中定位接口问题的基本手段,工程师通常先接触Wi-Fi代理方案。但在企业AP隔离、弱网环境或没有路由器的现场,Wi-Fi代理经常失效。USB网络共享技术将手机模拟为一张虚拟网卡,通过数据线在手机与电脑之间建立独立IP链路,不依赖任何无线环境,稳定性和可靠性远高于传统Wi-Fi代理。在Windows系统上配合Charles抓包工具,借助RNDIS驱动和ADB命令即可完成全局代理配置,实现对Android应用HTTP/HTTPS流量的明文解析。该方案适用于网络隔离严格的办公网络、户外调试、车载现场等

weixin_29185167的博客 299

Android全局代理应用proxydroid.zip

ProxyDroid 是 Android 上的一个全局代理应用,可以帮助你设置 Android 设备上的代理。 标签:proxydroid

什么是全局代理,手机怎么设置全局代理

全局代理是一种代理设置,可以将设备上的所有网络流量通过代理服务器进行中转和处理。它不仅适用于浏览器,还可以影响设备上的所有应用程序和系统组件。通过设置全局代理,可以实现对设备上所有网络通信的统一管理和控制。全局代理是一种常用的技术手段,通过设置代理服务器将设备上的所有网络流量转发和处理。它可以实现对网络流量的统一管理和控制,在访问限制、网络监控和隐私保护方面具有重要作用。

随便写写 6435

android-proxy-toggle:小型应用程序,可帮助android开发人员快速启用和禁用代理设置

代理切换 小型应用程序,可帮助Android和测试工程师快速启用/禁用全局代理设置,而无需费心处理烦人的“网络设置”路径。 每个版本或您发现需要更新的内容都是每个文档的最新动态。 应用安装 如果您只想使用该应用程序,则可以获取,连接设备并从终端执行安装脚本: ./installAndGrantPermission.sh Android 5.x 由于旧的adb限制,如果要将应用程序安装在运行Android 5.x的设备中,则必须分别运行两个命令: adb install -t -r proxy-toggle.apk adb shell pm grant com.kinandcarta.create.proxytoggle android.permission.WRITE_SECURE_SETTINGS 项目设置 无需特殊设置。 只需克隆存储库,它就应该开箱即用。 在撰写本文时,正在使

fiddler安卓模拟器与ios手机抓包

在抓包工具选择上,Fiddler是经典的选择,但对于需要更专业功能的用户,Sniff Master提供了更全面的解决方案。Fiddler适合基础抓包需求,而Sniff Master则支持更复杂的协议分析和数据包解码。

2501_91395274的博客 665

Codesys电子凸轮实战:从机械替代到虚轴设计的5个关键步骤

本文详细介绍了Codesys电子凸轮技术在运动控制领域的实战应用,从机械替代到虚轴设计的5个关键步骤。通过电子凸轮技术,操作员可以快速调整切割模式,显著提升产线效率。文章还探讨了虚轴架构、CAM表设计、动态耦合技巧及调试避坑指南,为工业自动化领域提供了实用的解决方案。

tech5的博客 767

荔枝派Nano内核编译

上文编译好uboot之后,想刷内核和根文件系统进去。其实官方的网盘里面,已经有打包好的系统镜像,包含所有的东西,可以直接烧录进flash或者TF卡,但是都是基于winbond芯片的,国产的xt25f128b刷进去妥妥的。所以没办法,只能自己再动手重新编译内核了。(PS:搞的我都想直接买一片w25q128换上了,有点麻烦,希望官方直接涨价或者出两版就行,不然对新手不友好啊)

木子点灯的博客 546

wireshark怎么抓apk 包_图解如何抓取手机的数据封包「手机抓包技术详解」

通常我们主要抓取手机等移动设备的三种数据封包:TCP、HTTP、HTTPS。本文我们主要通过图文详细讲解使用wireshark抓取手机的tcp数据包,使用Fiddler抓取手机的HTTP、HTTPS数据包以及android各版本 IOS各版本对于Fiddler证书安装的方法及区别。前文我们讲解过wireshark和Fiddler的详细使用方法,需要的可以翻阅前文。使用wireshark抓取手机等移...

weixin_35391606的博客 4485

避坑指南:OpenWebUI+SearXNG联网搜索的5个常见配置错误及解决方法

本文详细解析了OpenWebUI与SearXNG整合过程中常见的5个配置错误及解决方案,包括JSON格式配置陷阱、国内搜索引擎缺失、连续搜索失效等问题。通过实战验证的优化策略,帮助开发者避免性能下降和功能异常,提升大模型与搜索引擎的协同效率。

jenkins8butler的博客 818

手机全局代理设置教程:防止APP泄露真实IP

想让手机上所有APP都通过代理连接、彻底隐藏真实IP?设置“全局代理”才是关键

Shenglong_HTTP的博客 2681

Realsense D435i运行ORB-SLAM3

【代码】Realsense D435i运行ORB-SLAM3。

MAX_Hope的博客 2563

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码)

本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。

threejs5artist的博客 635

charles为什么只能运行30分钟_最全面的解决Charles手机抓包的证书问题(步骤非常详细)...

源自公众号文章: 彻底解决Charles手机抓包的证书问题简介: Charles 抓包是日常开发当中经常会用到的技术, 在 Android 6 之前, 手机系统既信任系统内置的证书, 也信任用户自己安装的证书, 但是在 Android 7 之后, 却发生了变化, 手机系统只信任系统内置的根证书. 当然了, 这是为了手机系统更安全. 但是这样以来, 原来抓包的方法就失效了. 本文主要全面讲解 IOS...

weixin_31527905的博客 1826

哨兵一号burst数据的下载和处理

在Sentinel - 1数据处理领域,其基本流程起始于从(ASF)下载原始压缩文件。这些文件规模颇为可观,常规大小约4GB,而部分数据的原文件甚至已攀升至7GB,对存储空间提出了严苛要求。从影像构成来看,每景Sentinel - 1影像由三个干涉宽幅(IW)模式子带组成,每个IW一般包含9个脉冲串(burst)。然而,在实际研究中,我们所关注的研究区域往往仅占据其中寥寥几个burst。

kangkangluoluo的博客 1965

手机设置全局代理ip步骤

在互联网时代,隐私和安全问题备受关注。使用全局代理能够帮助我们保护个人信息,突破地理限制,并提高网络速度。但是,你是否对全局代理的安全性存有疑虑?而且,如何在手机上设置全局代理呢?今天就让我们揭开这些疑问的答案,让你轻松设置手机全局代理,享受安全的网络环境吧!

weixin_44617651的博客 2226

【YOLO系列】YOLOv4详解:模型结构、损失函数、训练方法及代码实现

摘要:YOLOv4在目标检测领域实现了精度与速度的平衡,通过CSPDarknet53骨干网络、SPP+PANet特征融合及CIoU损失函数等创新,在MS COCO数据集达到65.7% AP50,V100显卡实现62FPS实时检测。核心优化包括Mosaic数据增强、自对抗训练和解耦头结构,显著提升小目标检测和遮挡场景鲁棒性。代码实现采用CSP模块和SPP多尺度池化,兼顾计算效率与检测性能,为工业落地提供高效解决方案。(149字)

一碗白开水一 1358

Allegro因为精度问题导致走线连接不上的解决办法

在用Allegro做PCB设计的时候,尤其是从其它单板上导数据过来的时候,有时会因为精度不一致导致连接不上,如下图。一般来说,可以逐个重新连接一下,但是如果连接点位比较多的话,需要花费较多时间。下面介绍如何使用Allegro自带的功能解决这个问题,具体操作如下。和Convert Figure Stackups to vias。因为精度问题导致走线连接不上的解决办法。线和过孔因为精度有微小的连接偏差。

weixin_54787054的博客 2611

【实战】利用adb命令快速切换手机代理IP与端口

本文详细介绍了两种利用adb命令高效切换手机代理的方法:一是通过系统设置命令实现全局代理切换,二是借助ProxySetter应用实现针对特定Wi-Fi的精准代理配置。文章提供了从环境搭建、命令详解到实战排坑的完整指南,旨在帮助移动开发者和测试人员提升网络调试与数据抓包的工作效率,实现一键切换与自动化集成。

x1y2z的博客 1033

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

安卓模拟器配置全局代理

工具:proxifier 目前很多安卓客户端会设置多种方式来验证客户端是否使用了代理,来防止抓包 比如: 1.检查客户端是否使用了代理,如果使用了代理,客户端就不再发送网络请求 2.通过Okhttp设置默认代理 3.使用okhttp实现SSL双向认证 如果在APP请求网络之前先判断下手机网络是否使用了代理,如果使用了代理就不请求接口,那么我们就无法抓取...

banacyo14206的博客 5005

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Microsoft todo任务恢复

真是花了我好久的时间才试出来 首先…我用的是win,没有尝试mac系统的可行性. 如果是在近期删除的,可以尝试登录outlook.com进入已删除邮件,并恢复。 如果时间较久远或者被删除任务较多,请尝试以下方法。 1.安装outlook客户端【作者是office365用户,所以直接office一套装好了 2.进入outlook后,电子邮件地址建议使用outlook网页版中”右上角设置-全部设置-邮件-同步电子邮件-默认发件人地址“outlook结尾的邮箱地址(这里可以通过检查功能直接复制) 3.点击继续后,

qq_17002553的博客 3928

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

教你在Android手机上使用全局代理

前言:在Android上使用系统自带的代理,限制灰常大,仅支持系统自带的浏览器。这样像QQ、飞信、微博等这些单独的App都不能使用系统的代理。如何让所有软件都能正常代理呢?ProxyDroid这个软件能帮你解决!使用方法及步骤如下: 一、推荐从Google Play下载ProxyDroid,目前最新版本是v2.6.6。 二、对ProxyDroid进行配置(基本配置:)        (1) Aut...

weixin_34248487的博客 9879
上一篇: linux下安装nginx,亲测生效
下一篇: Nginx配置https免费证书
carden_coder
博客等级 码龄10年 141粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

carden_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值