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


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

    关键代码:

    [java] view plain copy
     
    1. URL url = new URL(urlStr);  
    2. urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);  
    [java] view plain copy
     
    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手机中如何知道手机网络是否使用了代理?

    代码实践

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

    [java] view plain copy
     
    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和端口,则可以实现代理连接,

    下面是一个简单例子,

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


    实现自动代理

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

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

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

    [java] view plain copy
     
    1. package proxy;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintStream;  
    5. import java.net.InetSocketAddress;  
    6. import java.net.MalformedURLException;  
    7. import java.net.Proxy;  
    8. import java.net.ProxySelector;  
    9. import java.net.SocketAddress;  
    10. import java.net.URI;  
    11. import java.net.URL;  
    12. import java.net.URLConnection;  
    13. import java.util.ArrayList;  
    14. import java.util.List;  
    15. import java.util.Scanner;  
    16.   
    17. public class ProxyTest {  
    18.     final String PROXY_ADDR = "172.20.230.5";  
    19.     final int PROXY_PORT = 3128;  
    20.     String urlStr = "http://www.baidu.com";  
    21.     //String urlStr = "http://www.crazyit.org";  
    22.       
    23.     public void init() throws IOException {  
    24.         ProxySelector.setDefault(new ProxySelector(){  
    25.   
    26.             @Override  
    27.             public void connectFailed(URI arg0, SocketAddress arg1,  
    28.                     IOException arg2) {  
    29.                 System.out.println("无法连接到服务器");  
    30.                   
    31.             }  
    32.   
    33.             @Override  
    34.             public List<Proxy> select(URI uri) {  
    35.                 List<Proxy> result = new ArrayList<>();  
    36.                 result.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT)));  
    37.                 return result;  
    38.             }  
    39.               
    40.         });  
    41.           
    42.         URL url = new URL(urlStr);  
    43.         //使用代理服务器打开链接  
    44.         URLConnection conn = url.openConnection();  
    45.         conn.setConnectTimeout(5000);  
    46.         try {  
    47.             Scanner scan = new Scanner(conn.getInputStream());  
    48.             PrintStream ps = new PrintStream("index.html");  
    49.             while (scan.hasNextLine()) {  
    50.                 String line = scan.nextLine();  
    51.                 System.out.println(line);  
    52.                 ps.println(line);  
    53.             }  
    54.         } catch (IOException e) {  
    55.             e.printStackTrace();  
    56.         }  
    57.     }  
    58.       
    59.     public static void main(String[] args) throws IOException {  
    60.         new ProxyTest().init();  
    61.     }  
    62. }  


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

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

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

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

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

     解释:

    [java] view plain copy
     
    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是提供单个接口访问不带代理的,不废话,上代码

    [java] view plain copy
     
    1. URL url = new URL(urlStr);  
    2. urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);  

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

    [java] view plain copy
     
    1. OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();  

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

    自己调试的界面:  

     
  • 相关阅读:
    Spring Data JPA 的作用.
    JavaEE 规范和 SSH 三大框架的关系
    一些疑惑
    Linux学习总结(21)——CentOS7环境下FTP服务器的安装和配置
    Docker学习总结(18)——阿里超大规模Docker化之路
    Maven学习总结(32)——Maven项目部署到Tomcat8中
    Maven学习总结(31)——Maven坐标详解
    猎豹CEO傅盛:与周鸿祎、雷军、马化腾、马云的的相爱相杀
    Java Web学习总结(32)——Java程序员最亲睐的Web框架
    VMWare学习总结(1)——Centos7安装完毕后无法联网的解决方法
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9174663.html
Copyright © 2020-2023  润新知