【Android笔记】解决https抓包问题 & 网络知识记录

308 阅读3分钟

一、 APP抓包

工具一、Fidller 安装调试

1、细节说明

  1. raw模块可以看到request和reponse相关信息;

  2. fiddler手机下载证书提示No root certificate was found. Have you enabled HTTPS traff

  3. fiddler限速_fiddler限制网速

  4. Android 7.0 以上无法抓取 HTTPS 包的解决方式

  5. Android中HTTP网络请求相关问题

  6. 安卓官方清单文件标签说明

  7. 添加网络安全配置文件与相关CA说明

  8. 关于部分显示 tunnel to xxxx 这个是加密过的,不想看可以选择 Rules -> Hide Connects 进行关闭。

工具二、Charles 安装调试

三、共同问题

1、 https抓包问题

补充移动端:Charles下载移动端证书

1、Https会显示乱码:Charles 解决抓包显示乱码问题

  • 疑点1:使用抓包软件能获取https的图片,但https显示密文乱码;
  • 疑点2:Charles/Fidller开启解析密文后,app就连接不上https了
  • 疑点3::自测情况是IOS好像问题不大,Android很多机子都会有这种情况,低版本的可能会好一点;

2、Charles说明,部分应用可能会连不上,需要单独配置 image.png

3、解决方案:Charles Android 抓包失败SSLHandshake: Received fatal alert: certificate_unknown_

  1. 将手机安装的ca证书拷至电脑Android Stdio,App->res->raw文件中

image.png

  1. 针对目标域名指定信任的CA证书文件(以一个壁纸网站为例,Glide访问全链接为:``` dogefs.s3.ladydaily.com/~/source/un…

```` kotlin
<?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" >
            <base-config>
                <trust-anchors>
                    <certificates src="system"/>
                    <certificates src="user"/>
                </trust-anchors>
            </base-config>
        </base-config>
            <domain-config>
                <domain includeSubdomains="true">dogefs.s3.ladydaily.com</domain>
                <trust-anchors>
                    <!-- Trust user added CAs while debuggable only -->
                    <certificates src="@raw/charles" />
                    <certificates src="system" />
                </trust-anchors>
            </domain-config>
    </network-security-config>
  1. 再次发起请求即可次连接,Fidller估计同理,但是其是cer文件,拷进编译器会报波浪线。

  2. Fiddle同理,开启密文解析后 Fiddle需要重启,两端证书需要同时更新。 image.png

二、网络知识记录

1、 面试官,不要再问我三次握手和四次挥手

1、三次握手:客户端发起

  • 建立一个TCP连接时,需要客户端和服务器通过报文序列总共发送3个包
  • 客户端的第三次握手是确认连接,防止网络等其他原因发起多次请求进行多次连接。

2、四次挥手:客户端或服务器均可主动发起挥手动作

1、终止一个连接要的四次挥手由TCP的半关闭(half-close)造成的,。 2、半关闭:TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。 3、以客户端发起关闭连接为例:

  • 第一次发起关闭连接,没有新的请求了,但老的请求可能还在接收;
  • 第二次服务器发表示知道这么个事了,发个通知你下(半关闭与不等传完再发的原因),省的你以为我没收到发多次给我,我这边可能还在发,发完了和你说;
  • 于是有了第三次,服务端表示发完了 我也打算关闭了;
  • 第四次客户端发个确认,成我知道了 你关吧(由于第三次是服务端发的,如果没收到第四次挥手会重发第三次 其他的以此类推);