现象: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. set(gcf,'DoubleBuffer','on')

    设置的目的是为了防止在不断循环画动画的时候会产生闪烁的现象,而这样便不会了.在动画的制作比较常用.

  2. 【bzoj2100】[Usaco2010 Dec]Apple Delivery 最短路

    题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she tr ...

  3. Luogu1731 NOI1999生日蛋糕(搜索)

    非常经典的剪枝题然而一直没有写.感觉自己连普及组水平都没有了. 1.半径和高枚举范围满足加上后总体积不超过n且剩下每层还能放. 2.半径从大到小枚举,因为体积正比于半径平方而面积正比于半径,大的半径更 ...

  4. P3065 [USACO12DEC]第一!First!

    题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...

  5. Python fileinput模块详解

    Python的fileinput模块可以快速对一个或多个文件进行循环遍历. import fileinput for line in fileinput.input(): process(line) ...

  6. JavaScript中:表达式和语句的区别

    JavaScript中:表达式和语句的区别 Javascript语言精粹:表达式是由运算符构成,并运算产生结果的语法结构.程序是由语句构成,语句则是由“:(分号)”分隔的句子或命令.如果在表达式后面加 ...

  7. CentOS7 从查看、启动、停止服务说起systemctl

    执行命令“systemctl status 服务名.service”可查看服务的运行状态,其中服务名后的.service 可以省略,这是CenOS7以后采用systemd作为初始化进程后产生的变化. ...

  8. [SP8372-TSUM]Triple Sums

    题面在这里 description 某\(B\)姓\(OJ\)权限题 给出\(n\)个正整数\(a[i]\),求\(i<j<k\)且\(S=a[i]+a[j]+a[k]\)的三元组\((i ...

  9. [洛谷P4721]【模板】分治 FFT_求逆

    题目大意:给定长度为$n-1$的数组$g_{[1,n)}$,求$f_{[0,n)}$,要求: $$f_i=\sum_{j=1}^if_{i-j}g_j\\f_0=1$$ 题解:分治$FFT$博客,发现 ...

  10. URAL1297:Palindrome——题解

    http://acm.timus.ru/problem.aspx?space=1&num=1297 https://vjudge.net/problem/URAL-1297 给定一个字符串,求 ...