Android网络握手失败问题分析

文章描述了一种在调用云端接口时遇到的SSLHandshakeException问题,通过在不同机器上对比代码行为和使用tcpdump进行网络包抓包,发现是加密方式导致的握手失败。借助Wireshark分析抓包文件后,确定问题在于未根据加密方式做出正确判断。修复加密相关代码后,问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题场景

调用某功能云端接口请求,保存如下信息:Web服务通信期间握手期间远程主机关闭连接

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

分析

由于同一份代码不同机器有的能调用成功,有的调用失败的前提下,网上给的解决方案无法解决(比如,配置环境等)。

采用tcpdump抓包继续分析问题:

  1. 机器需要有root权限(adb root/su)
  2. 下载tcpdump(获取地址
#本地推送到android端
adb push ~/Downloads/tcpdump  /data/local/tcpdump
#修改tcpdump权限
chmod 777 /data/local/tcpdump
#进入root权限
su
#运行命令启动抓包
/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap
#在android端执行相应需要进行抓包分析的操作,
#执行完成后在命令提示符窗口执行Ctrl+C中断抓包进程
  1. 使用Wireshark等工具查看抓包文件
    Wireshark For Mac (64-bit) 1.11.2下载地址:http://www.onlinedown.net/softdown/109518_2.htm
  2. 用wireshark打开capture.pcap即可分析log
  3. 根据调用的api查询ip:ping xxx.com(域名)

结论

通过正常调用和握手失败的两个网络包对比分析,截图如下:
在这里插入图片描述请求服务端时使用的加密有差异,第二种加密方式无法正常握手成功,检查加密相关代码,发现未根据是否使用GM加密方式做判断导致的问题。至此,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值