Android 开发之避免被第三方使用代理抓包
现象:charles抓不到包,但wireshark,HttpAnalyzor可以抓到包。
关键代码:
- URL url = new URL(urlStr);
- urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
- 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手机中如何知道手机网络是否使用了代理?
代码实践
经过查找资料与实践,发现如下的代码能够满足需求:
- private boolean isWifiProxy() {
- final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
- String proxyAddress;
- int proxyPort;
- if (IS_ICS_OR_LATER) {
- proxyAddress = System.getProperty("http.proxyHost");
- String portStr = System.getProperty("http.proxyPort");
- proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
- } else {
- proxyAddress = android.net.Proxy.getHost(this);
- proxyPort = android.net.Proxy.getPort(this);
- }
- return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
- }
JAVA基础知识之网络编程——-使用Proxy创建连接
转:https://www.cnblogs.com/fysola/p/6089416.html
在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络,
如果改用URLConnection conn = url.openConnection(proxy);方式,传入一个proxy对象,设置好代理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.URL;
- import java.net.URLConnection;
- 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 {
- URL url = new URL(urlStr);
- Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT));
- //使用代理服务器打开链接
- URLConnection conn = url.openConnection(proxy);
- //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对象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设置了一个可用代理后,然后再到自己的应用中耍,发现了一个大悲剧,
就是所有接口都访问不了,全部进了异常中,瞬间就两眼泪汪汪了,后来问了度娘,给出的一个还能用的
解释:
- System.getProperties().remove("http.proxyHost");
- System.getProperties().remove("http.proxyPort");
- System.getProperties().remove("https.proxyHost");
- System.getProperties().remove("https.proxyPort");
每错,这就是移除所有代理,但问题是如果移除全部,那蜗牛其他的功能就必会受一些影响,没办法,只能
自己去看SDK,果然,Android是提供单个接口访问不带代理的,不废话,上代码
- URL url = new URL(urlStr);
- urlConnection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
嗯,很实在,然后蜗牛又去看了一下OKhttp框架是否提供类似的操作,·······果然不愧是好框架:
- OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();
好了,蜗牛就只弄了这点,有错请指出!!!!
自己调试的界面:
Android 开发之避免被第三方使用代理抓包的更多相关文章
- 部分APP无法代理抓包的原因及解决方法
引言 HTTP应用层的抓包已经成为日常工作测试与调试中的重要一环,最近接触新项目突然之间发现之前的抓包手段都不好使了,顿时模块与模块之间的前端与服务之间的交互都变成了不可见,整个人都好像被蒙住了眼睛. ...
- iOS 10.3下解决Fiddler代理抓包ssl证书信任问题
iPhone系统更新到iOS 10.3以后,设置fiddler代理抓包,会出现无法抓取https请求,app请求失败的问题 这是因为在iOS 10.3之前,当你将安装fiddler的自定义证书后,iO ...
- 安全测试6_Web安全工具第二节(代理抓包分析工具)
上节课讲了浏览器及扩展,这节课继续来学习下抓包分析. 首先看下下图,了解下代理工具的原理:代理就相当于收费站一样,任何要通过的车辆必须经过它. 浏览器的代理我们可以通过设置进行手动设置代理,或者通过P ...
- Android开发中无处不在的设计模式——动态代理模式
继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...
- Droid4x设置代理抓包
Droid4x也是基于virtualbox+x86架构的 代理设置 设置->WIFI->鼠标按住WiredSSID选项不放->修改网络->显示高级选项->代理-> ...
- ios透明代理抓包
之前接到一些ios测试的时候,一些应用往往由于这样那样的原因(比如自实现的发包函数)导致直接使用本地ios系统的代理很难将数据代理到主机的burp或findler中,本文提供了一种解决该问题的途径 原 ...
- Android开发常用的一些第三方网站
聚合数据-免费数据调用 https://www.juhe.cn/ 有赞- 免费的微商城 http://youzan.com/ 秀米微信图文编辑器 http://xiumi.us/ 禅道项目管理软件 h ...
- Android开发中用到的第三方框架汇总
最近上网搜索了一些框架资料,整理了以下常用框架,希望在项目中有所帮助. 1.网络请求框架 android-async-http 该网络框架的介绍文章地址:http://www.cnblogs.com/ ...
- Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能
博客描述:后台返回地点的经纬度在地图上进行描点,点击导航弹出PopupWindow进行选择地图操作,如果手机中没有安装地图,提示没有,否则传值调起地图进行导航操作 看一下实现的效果,没图说再多都白搭 ...
随机推荐
- 推荐算法相关总结表(包括DM)
推荐算法总结表 表1 推荐算法分类 个性化推荐算法分类 启发式算法 基于模型 基于内容 TF-IDF 聚类 最大熵 相似度度量 贝叶斯分类 决策树 神经网络 专家系统 知识推理 协同过滤 K近邻 聚类 ...
- [BZOJ5303] [HAOI2018] 反色游戏
题目链接 LOJ:https://loj.ac/problem/2524 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5303 洛谷:https ...
- POJ1523:SPF——题解
http://poj.org/problem?id=1523 这题明显就是求割点然后求割完之后的强连通分量的个数. 割点都会求,怎么求割完的分量个数呢? 我们可以通过万能的并查集啊!(具体做法看代码吧 ...
- HTTPS证书生成方法,也适用于APP
步骤: 一.登录服务器,创建ioscert目录 cd ~/servers/APP mkdir ioscert 二.cd到ioscert目录下,执行以下命令: 1.openssl genrsa -out ...
- 洛谷 P2730 魔板 Magic Squares 解题报告
P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...
- AOJ. 数组训练.2016-11-17
A题 #include <stdio.h> #include <stdlib.h> #define max 1000 __int64 a[max] = {0,1,1}; int ...
- 2016多校联合训练1 D题GCD (ST表+二分)
暑假颓废了好久啊...重新开始写博客 题目大意:给定10w个数,10w个询问.每次询问一个区间[l,r],求出gcd(a[l],a[l+1],...,a[r])以及有多少个区间[l',r']满足gcd ...
- Codeforces VK Cup Finals #424 Div.1 C. Bamboo Partition(数论)
题目要求符合以下条件的最大的d 化简得 注意到 最多只有2*sqrt(a[i]-1)种取值,也就是一共最多有n*sqrt(10^19)种取值,于是枚举一下d,计算出符合上上式的最大的d更新答案,然后d ...
- 【神仙题】【P4885】 灭顶之灾
传送门 Description 请将题目名称的首字母连起来读 Scarlet有一张$n*m$的神秘表格.现在Scarlet向表格中填数字,她会从第一行中的某个格子起,按照从左往右,从上往下的顺序依次填 ...
- 裸机配置C语言运行环境
C语言程序的执行需要栈的支持.部分soc未初始化栈的情况下调用C语言程序会发生错误. start.S中一共配置了看门狗,svc栈,icache. 在x210中看门狗默认关闭,svc栈默认开启,icah ...