千家信息网

Android App怎么防止抓包

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,本篇内容主要讲解"Android App怎么防止抓包",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android App怎么防止抓包"吧!正文当我们进行网
千家信息网最后更新 2025年11月08日Android App怎么防止抓包

本篇内容主要讲解"Android App怎么防止抓包",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android App怎么防止抓包"吧!

正文

当我们进行网络请求的时候,一般通过URL的openConnection来建立连接,代码如下:

URLConnection conn = url.openConnection()

其实openConnection这个函数还有一个版本,可以传入一个proxy对象,代码如下:

public URLConnection openConnection(Proxy proxy)    throws java.io.IOException

这样我们通过这个函数建立连接时传入一个Proxy.NO_PROXY,即可达到防止抓包的效果,如Charles等抓包工具就无法看到我们的链接信息了,代码如下

URLConnection conn = url.openConnection(Proxy.NO_PROXY)

官方对于Proxy.NO_PROXY描述如下:

/** * A proxy setting that represents a {@code DIRECT} connection, * basically telling the protocol handler not to use any proxying. * Used, for instance, to create sockets bypassing any other global * proxy settings (like SOCKS): * 

* {@code Socket s = new Socket(Proxy.NO_PROXY);} * */public final static Proxy NO_PROXY = new Proxy();// Creates the proxy that represents a {@code DIRECT} connection.private Proxy() { type = Type.DIRECT; sa = null;}

我么可以看到NO_PROXY实际上就是type属性为DIRECT的一个Proxy对象,这个type有三种:

  • DIRECT

  • HTTP

  • SOCKS

官方描述如下:

public enum Type {    /**     * Represents a direct connection, or the absence of a proxy.     */    DIRECT,    /**     * Represents proxy for high level protocols such as HTTP or FTP.     */    HTTP,    /**     * Represents a SOCKS (V4 or V5) proxy.     */    SOCKS};

这样因为是直连,所以不走代理。所以Charles等工具就抓不到包了,这样一定程度上保证了数据的安全。

当然这种方式只是通过代理抓不到包,如果直接通过路由还是可以抓包的。

补充:使用证书校验

这种方式要在app嵌入证书,以okhttp为例:

当okhttp使用X509TrustManager对服务器证书进行校验时,如果服务器证书的 subjectDN 和嵌入证书的 subjectDN 一致,我们再进行签名内容 signature 的比对,如果不一致,抛出异常。示例代码如下:

  • 首先从本地读出证书,获取一个X509Certificate

val myCrt: X509Certificate by lazy {    getCrt(R.raw.my_ca)}private fun getCrt(@RawRes raw: Int): X509Certificate {    val certificateFactory = CertificateFactory.getInstance("X.509")    val input = ApplicationContext.resources.openRawResource(raw)    input.use {        return certificateFactory.generateCertificate(input) as X509Certificate    }}
  • 检查服务器证书时对比嵌入的证书

private fun getTrustManagerInRelease(): X509TrustManager {    return object : X509TrustManager {        override fun checkClientTrusted(chain: Array, authType: String?) {}        override fun getAcceptedIssuers(): Array = arrayOf()        override fun checkServerTrusted(chain: Array, authType: String?) {            val myCrt: X509Certificate = myCrt            if (chain[0].subjectDN.name == myCrt.subjectDN.name) {                if (!myCrt.signature!!.contentEquals(chain[0].signature)) {                    throw SSLHandshakeException("签名不符!")                }            }        }    }}
  • 将自定义的 SSLSocketFactory 和 X509TrustManager 将入到 okhttp 客户端

    private fun getClient(ssl: SSLSocketFactory, trustManager: X509TrustManager): OkHttpClient {        return OkHttpClient.Builder()            .retryOnConnectionFailure(true)            .proxy(Proxy.NO_PROXY)            .sslSocketFactory(ssl, trustManager)            .build()    }

这样一来便无法通过 Drony + Charles 进行抓包了

到此,相信大家对"Android App怎么防止抓包"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

证书 代码 内容 服务器 服务 一致 函数 官方 实际 对象 工具 方式 代理 学习 实用 更深 安全 这样一来 一来 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 龙源数据库是什么级别期刊 在手机里创建数据库 软件开发授权说明书怎么写 软件开发项目进度偏差原因 长生诀 数据库密码 无法连接firefox服务器 网络安全综合治理原则 武器系统网络安全报告 我的世界手机版服务器建安全屋 目前比较厉害的网络技术 广州星际网络技术公司王名校 自建服务器备案 标准服务器设计效果图 金华中联网络技术有限公司 浅谈网络安全与防范 网络安全责任制落实整改报告 服务器灾备预案怎么写 交通银行软件开发中心面经 qlabel怎么设置数据库连接 用服务器连接外网 实用网络技术重要性 数据库员工查询密码密令 rtsp流推送服务器 数据库加密技术国产 视频应用服务器配置知乎 江苏本地软件开发市价 互联网振兴乡村是不是算科技强国 广东企业软件开发怎么样 网络安全及大数据知识点 深圳读书软件开发哪个学校好
0