Wireshark我使用了一段时间,才知道这是抓包神器,最全最牛逼的抓包软件。当时我之所以要学习Wireshark,是因为要抓取手机端今日头条的请求,看今日头条的懒加载是如何做的,从而无耻学习。我就这么直白,不服来打我呀,打我呀打我呀。
o( ̄ヘ ̄o#) 哼,言归正传。
今日头条的手机端的URL为:http://m.toutiao.com
早期的时候,我使用Charles(大花瓶)抓取的时候,今日头条的请求方式还是普通的GET请求。但是不知道从何时开始,大花瓶已经抓不住他了,已经和那些普通妖艳贱货不一样了。
已经变得这么的高冷,让别人无法接近。
从Charles(具体使用方法在本文的最下面)口中得知。
我们已经不能从GET和POST中获取到任何的新闻信息,排除了某宝,二手东,和广告的连接,发现了4个Method为Connect有嫌疑的连接。
犯罪嫌疑人有4人,如下:
https://e.crashlytics.com
https://a3.bytecdn.cn
https://i.snssdk.com
https://is.snssdk.com
首先排除第一个Crashlytics,他是统计Crash的工具。
然后排除第二个bytecdn。CDN服务商,网络服务商。
好的接下来两个就是重头戏了。
得到的数据辣眼睛
看来Charles已经只能帮我到这了,Charles虽然很方便,GET和POST请求是他的强项,能直接显示URL、请求头、参数名、参数格式,如果返回的是图片,还能直接在Charles中看到图片。但是Charles处理不了TCP、ICMP、UDP、DNS。看到的数据也有限,基本就是应用层的信息,如果想看到物理层的数据帧情况,链路层的帧头部信息,IP的包头部信息,那Charles已然GG了,而且通过大神指点,知道这明摆的就是TCP传输,用Wireshark解析,这好使。
我们先熟悉一下 Wireshark for Mac 的界面。
点击接口名称之后,就可以看到实时接收的报文。Wireshark会捕捉系统发送和接收的每一个报文。如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。
使用Wireshark时最常见的问题,是当您使用默认设置时,会得到大量冗余信息,而且这些信息包括Mac的还有iPhone的,数据量比Charles大的多,以至于很难找到自己需要的部分,所以一定得学会用过滤器。
这就是为什么过滤器会如此重要。它们可以帮助我们在庞杂的结果中迅速找到我们需要的信息。
捕捉过滤器:用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
显示过滤器:在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
比较常用的过滤器:1.输入Method 2.还有就是IP的搜索。
例如,输入“TCP”就会只看到TCP报文。输入的时候,Wireshark会帮助自动完成过滤条件。
最经常用的:
ip.src == 10.2.189.0 or ip.dst == 10.2.189.0
其他常用的:
tcp dst port 3128 显示目的TCP端口为3128的封包。
ip src host 10.1.1.1 显示来源IP地址为10.1.1.1的封包。
host 10.1.2.3 显示目的或来源IP地址为10.1.2.3的封包。
src portrange 2000-2500 显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。
not imcp 显示除了icmp以外的所有封包。(icmp通常被ping工具使用)
src host 10.7.2.12 and not dst net 10.200.0.0/16 显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。
数据处理:
如图上,可以发现。
Frame: 物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP
Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议(但是这里没显示出来)
物理层和链路层还有头部的信息,如果只是普通抓包的话,我们完全用不上。
传输层协议和HTTP协议是大头。其中有一些明显的数据。(比如URL,请求头啊)
万事俱备只抓包
此时找到今日头条的TCP消息,右键,追踪流,TCP流。
今日头条!Gotta catch!!
终于抓到TCP的内容了,建立了长连接以后,
蓝色的是我对今日头条发送的信息,红色是对方返回的信息。数据还在破解中,抓包过程到此结束。
总结
今日头条把原先的GET和POST方法,经过了TCP的一轮封装,两个IP地址通过端口长连接以后,这是第一层保护;接着我会给服务器发送我请求的信息,请求的信息通过封装后(估计是又回到了Get请求)给服务器发送,服务器再给我返回信息,这是第二层保护;最后服务器发送的信息,是乱码!!!我的天,居然还是乱码。
嗨!真的好气啊。
这是第三层保护,通过某种加密方式,把返回的json数据加密了,返回的内容完全看不懂,只有通过App的解密,才能知道今日头条的信息。
真有你的。
大体介绍下Charles的流程:
1.配置iPhone或Android 的wifi配置。首先保证Mac电脑和手机是在同一个局域网内。
2.设置手机wifi配置,在HTTP代理中选择手选代理,服务器填写Mac的IP地址。端口使用8888。
(查看Mac的IP地址:系统偏好设置-->网络-->状态-->其IP地址为:xx.xx.xx.xx )
3.此时再打开Charles,接着Charles会问你,是否允许该设备代理上网,选择Allow。
4.此时手机的所有GET和POST请求,都逃不过Charles的追踪。