一.为什么要使用wireshark
爬虫的原理就是通过模拟发送请求来获得服务器的返回,从而抓取所需要的信息。
对于pc上的浏览器,可以通过查看源代码,或者查看json文件(使用js加载的)来获得请求。
但是对于app这样的软件,我们只能通过wireshark来捕获当我们触发了某个事件,到底是发送了哪些请求。(当然它也可以用来捕捉浏览器的包)
二.怎么使用wireshark
Wireshark的功能十分强大,我们需要用到的只是其中的一点点中的一点点。有兴趣的可以自己专研。
一点点—选择捕获
与我们工作相关的协议主要是http协议,而http协议是基于TCP的。
Wireshark会捕捉各种各样的包,而我们只需要其中的几个包,如果都捕捉到反而不方便我们的查找。
所以我们只需要过滤出对我们有用的。
选择你需要的捕捉的网络以及你想要分析的协议,这里只选择http tcp。
我们以追书神器为例,当完成了一系列的操作之后,我们把捕捉关闭。
然后一步步的来分析它的过程。
一点点的一点点--(显示过滤):
Wireshark界面有三个窗口:
1. 最上面窗口列出所有的包;
2. 中间窗口显示每个包的详细信息;
3. 最下面的窗口我们不会用到它,所以忽略。
为了方便查找,我们只需要显示到底发送了什么请求。
所以我们先筛选出所有的request包:http.request
然后慢慢的找到我们想要的那个包。
怎么找:一个个找。。。然后点开下面的详细页面,点开那个URL,看看是不是想要的那个页面。
我们把刚刚点击的那个包打开来。
好的,我们找到了我们刚刚点击的那个小说的信息了。
Ok,我们来跟踪一下这个包。
红色的为请求,蓝色的为响应。
前三个包是TCP的三次握手,后三个包是TCP的四次挥手(这里的fin和ack合起来一起发了,所以只看到三个包了)。
中间两个则是我们的请求和返回。
可以看到,返回的文件使用js加载的json文件。
到了这里,我们可以知道我们发的包目的主机的ip地址为42.62.26.167
于是我们可以再过滤一遍,看看这些包到底有什么规律。
host.request and ip.dst==42.62.26.167
是不是更加一目了然了。
当语法无误的时候背景色为绿色,当存在语法错误时,背景色为红色。
三.过滤语法
当我们点击一个网页服务器是怎么知道要把什么内容发给我们的呢。
当我们请求这个页面:
http://api.zhuishushenqi.com/book/560c0ebc5a41673955935a28
从中可以分解出
协议名:http
主机名:api.zhuishushenqi.com
端口:默认80
对象路径:/book/560c0ebc5a41673955935a28
然后封装成http包,再加上tcp头部,封装成tcp包,再加上ip头部,封装成ip包。
所以这其中用到ip协议,tcp协议,http协议。
1.ip协议:计算机之间的通信。
所以他的对象是ip地址。
因此要过滤ip地址的话选用:
ip.addr==
ip.src==
ip.dst==
2.tcp协议:端口与端口之间的通信。
所以他的对象是端口。
因此要过滤端口的话选用:
tcp.port==
tcp.srcport==
tcp.dstport==
3.http协议:客户端与服务器之间的通信。
http的工作模式是请求响应模式。
所以:
http.request
http.response
对于请求:
请求的方式主要有GET,POST
于是:可以过滤方式,
http.request.method==GET
http.request.method==POST
请求的uri:
http.request.uri contains baidu
服务器的过滤:
http.host==
http.host matches
http.host contains (和上面个功能差不多,不过上面个可以使用匹配)