- https的数据包为啥抓不到
p1:今天在测试,java的2个http客户端在连接网关时,同样的报文出现不同的反应,使用charles进行抓包时,同时与第3个客户端python脚本比对时,发现python正常抓包。但IDEA下的java客户端抓包为空?
见解:
- 为啥idea的https不会被抓到,它只是ide,charles是对通信数据包+协议抓包,和ide有啥关系。显然不成立
- 经过转发策略发现。python发出的是https的数据包。java这边是socket+http的请求包。
- 对比java的2个不同反馈的请求数据包发现 ,代理模式抓取失败,是因为默认代理是操作系统代理,而java的数据包内容走的是模拟浏览器,需要在代码种设置代理,正式因为这个差异,造成charlet没有抓取到本次java的数据包,采取转发策略后,数据包正常抓取。
- java-1(正常访问) java-2(被拒绝) : get 请求到底啥差异 跟踪eop对get+body ,针对java二种客户端产生不同反应,以下是二者报文差异
- 抓取本地发送的数据包
理论上因为代理设置不合理,或者协议不符合等问题都会造成抓取失败,下面的方案也是charles默认配置没有抓取的情况下,采取http转发策略,发现有效。 解决了 案例【https的数据包为啥抓不到 】
- 【ide】工程访问127.0.0.1:8000
- 【charles】 转发设置 8000到127.0.0.1:8888
- 【charles】 代理设置 端口8888
【charles】若为https+idea开发
- 点击Proxy -> SSL Proxying Settings, 添加信任地址 host:443 ( 全信任的话 可以配置 *:443 ) 和打开Enable SSL Proxying
- 下载根证书,安装到操作系统以及浏览器
- 参考【Https开发设置中间代理 】
- 抓取本地接受的数据包
- 可在应用卸载证书之后,进行明文抓包。采取tcpdump+wireshark最快