现象:charles抓不到包,但wireshark,HttpAnalyzor可以抓到包。

关键代码:

  1. URL url = new URL(urlStr);
  2. urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
  1. OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();

Android 如果防止APK被抓包工具抓包

转:http://blog.csdn.net/a6136581/article/details/72627026

平时都是用Fiddler对Android应用进行抓包,如果对Fiddler不熟悉,可以点击查看Fiddler抓包方法。在抓抱前,需要将手机的WiFi进行代理设置,然后才能在电脑上使用Fiddler成功抓包,那么我们试想一下,如果在APP请求网络之前先判断下手机网络是否使用了代理,如果使用了代理就不请求接口。新的问题来了,在Android手机中如何知道手机网络是否使用了代理?

代码实践

经过查找资料与实践,发现如下的代码能够满足需求:

  1. private boolean isWifiProxy() {
  2. final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
  3. String proxyAddress;
  4. int proxyPort;
  5. if (IS_ICS_OR_LATER) {
  6. proxyAddress = System.getProperty("http.proxyHost");
  7. String portStr = System.getProperty("http.proxyPort");
  8. proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
  9. } else {
  10. proxyAddress = android.net.Proxy.getHost(this);
  11. proxyPort = android.net.Proxy.getPort(this);
  12. }
  13. return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
  14. }

JAVA基础知识之网络编程——-使用Proxy创建连接

转:https://www.cnblogs.com/fysola/p/6089416.html

在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络,

如果改用URLConnection conn = url.openConnection(proxy);方式,传入一个proxy对象,设置好代理IP和端口,则可以实现代理连接,

下面是一个简单例子,

  1. package proxy;
  2. import java.io.IOException;
  3. import java.io.PrintStream;
  4. import java.net.InetSocketAddress;
  5. import java.net.MalformedURLException;
  6. import java.net.Proxy;
  7. import java.net.URL;
  8. import java.net.URLConnection;
  9. import java.util.Scanner;
  10. public class ProxyTest {
  11. final String PROXY_ADDR = "172.20.230.5";
  12. final int PROXY_PORT = 3128;
  13. String urlStr = "http://www.baidu.com";
  14. //String urlStr = "http://www.crazyit.org";
  15. public void init() throws IOException {
  16. URL url = new URL(urlStr);
  17. Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT));
  18. //使用代理服务器打开链接
  19. URLConnection conn = url.openConnection(proxy);
  20. //URLConnection conn = url.openConnection();
  21. conn.setConnectTimeout(5000);
  22. try {
  23. Scanner scan = new Scanner(conn.getInputStream());
  24. PrintStream ps = new PrintStream("index.html");
  25. while (scan.hasNextLine()) {
  26. String line = scan.nextLine();
  27. System.out.println(line);
  28. ps.println(line);
  29. }
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. public static void main(String[] args) throws IOException {
  35. new ProxyTest().init();
  36. }
  37. }

实现自动代理

在上面的例子中,每次用url对象open一个connection的时候,都需要显示地传入一个proxy对象才行。

而实际上可以在connection之前,做一个默认代理设置,这样以后再openConnection的时候,就不需要显示传入proxy对象了。

做默认代理设置需要重写ProxySelector的select方法,返回代理IP和端口列表,具体实现如下,


package proxy;  
  
import java.io.IOException;  
import java.io.PrintStream;  
import java.net.InetSocketAddress;  
import java.net.MalformedURLException;  
import java.net.Proxy;  
import java.net.ProxySelector;  
import java.net.SocketAddress;  
import java.net.URI;  
import java.net.URL;  
import java.net.URLConnection;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Scanner;  
  
public class ProxyTest {  
    final String PROXY_ADDR = "172.20.230.5";  
    final int PROXY_PORT = 3128;  
    String urlStr = "http://www.baidu.com";  
    //String urlStr = "http://www.crazyit.org";  
      
    public void init() throws IOException {  
        ProxySelector.setDefault(new ProxySelector(){  
  
            @Override  
            public void connectFailed(URI arg0, SocketAddress arg1,  
                    IOException arg2) {  
                System.out.println("无法连接到服务器");  
                  
            }  
  
            @Override  
            public List<Proxy> select(URI uri) {  
                List<Proxy> result = new ArrayList<>();  
                result.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT)));  
                return result;  
            }  
              
        });  
          
        URL url = new URL(urlStr);  
        //使用代理服务器打开链接  
        URLConnection conn = url.openConnection();  
        conn.setConnectTimeout(5000);  
        try {  
            Scanner scan = new Scanner(conn.getInputStream());  
            PrintStream ps = new PrintStream("index.html");  
            while (scan.hasNextLine()) {  
                String line = scan.nextLine();  
                System.out.println(line);  
                ps.println(line);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
      
    public static void main(String[] args) throws IOException {  
        new ProxyTest().init();  
    }  
}  

可以看到使用代理之后,再用url打开链接时就能像普通连接那样url.openConnection();了

Android 开发之避免被第三方使用代理抓包

转:http://blog.csdn.net/a807891033/article/details/53643550

最近遇到一个问题,手机wifi设置了一个可用代理后,然后再到自己的应用中耍,发现了一个大悲剧,

就是所有接口都访问不了,全部进了异常中,瞬间就两眼泪汪汪了,后来问了度娘,给出的一个还能用的

解释:

  1. System.getProperties().remove("http.proxyHost");
  2. System.getProperties().remove("http.proxyPort");
  3. System.getProperties().remove("https.proxyHost");
  4. System.getProperties().remove("https.proxyPort");

每错,这就是移除所有代理,但问题是如果移除全部,那蜗牛其他的功能就必会受一些影响,没办法,只能

自己去看SDK,果然,Android是提供单个接口访问不带代理的,不废话,上代码

  1. URL url = new URL(urlStr);
  2. urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);

嗯,很实在,然后蜗牛又去看了一下OKhttp框架是否提供类似的操作,·······果然不愧是好框架:

  1. OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();

好了,蜗牛就只弄了这点,有错请指出!!!!

自己调试的界面:

 

Android 开发之避免被第三方使用代理抓包的更多相关文章

  1. 部分APP无法代理抓包的原因及解决方法

    引言 HTTP应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了不可见,整个人都好像被蒙住了眼睛. ...

  2. iOS 10.3下解决Fiddler代理抓包ssl证书信任问题

    iPhone系统更新到iOS 10.3以后,设置fiddler代理抓包,会出现无法抓取https请求,app请求失败的问题 这是因为在iOS 10.3之前,当你将安装fiddler的自定义证书后,iO ...

  3. 安全测试6_Web安全工具第二节(代理抓包分析工具)

    上节课讲了浏览器及扩展,这节课继续来学习下抓包分析. 首先看下下图,了解下代理工具的原理:代理就相当于收费站一样,任何要通过的车辆必须经过它. 浏览器的代理我们可以通过设置进行手动设置代理,或者通过P ...

  4. Android开发中无处不在的设计模式——动态代理模式

    继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...

  5. Droid4x设置代理抓包

    Droid4x也是基于virtualbox+x86架构的   代理设置 设置->WIFI->鼠标按住WiredSSID选项不放->修改网络->显示高级选项->代理-> ...

  6. ios透明代理抓包

    之前接到一些ios测试的时候,一些应用往往由于这样那样的原因(比如自实现的发包函数)导致直接使用本地ios系统的代理很难将数据代理到主机的burp或findler中,本文提供了一种解决该问题的途径 原 ...

  7. Android开发常用的一些第三方网站

    聚合数据-免费数据调用 https://www.juhe.cn/ 有赞- 免费的微商城 http://youzan.com/ 秀米微信图文编辑器 http://xiumi.us/ 禅道项目管理软件 h ...

  8. Android开发中用到的第三方框架汇总

    最近上网搜索了一些框架资料,整理了以下常用框架,希望在项目中有所帮助. 1.网络请求框架 android-async-http 该网络框架的介绍文章地址:http://www.cnblogs.com/ ...

  9. Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能

    博客描述:后台返回地点的经纬度在地图上进行描点,点击导航弹出PopupWindow进行选择地图操作,如果手机中没有安装地图,提示没有,否则传值调起地图进行导航操作 看一下实现的效果,没图说再多都白搭 ...

随机推荐

  1. BZOJ 1082 栅栏(二分+DFS剪枝)

    首先,长度短的木板一定比长度长的木板容易得到,因此若要得到最多的木板,它们必定是所有木板中最短的——可以对木板排序后二分答案(用k表示). 判断是否合法就用搜索,但数据有点大,要用到两个剪枝.一个是若 ...

  2. BZOJ4850/BZOJ2216 JSOI2016灯塔/Poi2011Lightning Conductor(决策单调性)

    即对每个i最大化hj-hi+sqrt(|i-j|).先把绝对值去掉,正反各做一次即可.注意到当x>y时,sqrt(x+1)-sqrt(x)<sqrt(y+1)-sqrt(y),所以若对于i ...

  3. P2845 [USACO15DEC]Switching on the Lights 开关灯

    题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.(1<n<100) 然而bessie十分怕黑,他想计算可以把 ...

  4. hadoop 使用Avro排序

    在上例中,使用Avro框架求出数据的最大值,本例使用Avro对数据排序,输入依然是之前的样本,输出使用文本(也可以输出Avro格式). 1.在Avro的Schema中直接设置排序方向. dataRec ...

  5. 容器化RDS|计算存储分离 or 本地存储?

    随着交流机会的增多(集中在金融行业,规模都在各自领域数一数二),发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架构应用到 RDS 领域.数据库服务的需求可以 ...

  6. HDOJ(HDU).1258 Sum It Up (DFS)

    HDOJ(HDU).1258 Sum It Up (DFS) [从零开始DFS(6)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双 ...

  7. 【Codeforces 506E】Mr.Kitayuta’s Gift&&【BZOJ 4214】黄昏下的礼物 dp转有限状态自动机+矩阵乘法优化

    神题……胡乱讲述一下思维过程……首先,读懂题.然后,转化问题为构造一个长度为|T|+n的字符串,使其内含有T这个子序列.之后,想到一个简单的dp.由于是回文串,我们就增量构造半个回文串,设f(i,j, ...

  8. [zhuan]VMware中bridge方式网络不能上网的解决办法

    http://jingpin.jikexueyuan.com/article/31601.html 安装好VMware 7后,打开原来的虚拟机文件,发现不能上网,原来的Ethernet是设置的Brid ...

  9. 【线段树】【P3372】模板-线段树

    百度百科 Definition&Solution 线段树是一种log级别的树形结构,可以处理区间修改以及区间查询问题.期望情况下,复杂度为O(nlogn). 核心思想见百度百科,线段树即将每个 ...

  10. bzoj 1189 [HNOI2007]紧急疏散evacuate 二分+网络流

    [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3626  Solved: 1059[Submit][St ...