创作不易,希望点个赞!
如果本文有任何问题错误,欢迎评论指正!
(点个赞!点个赞!点个赞!点个赞!点个赞!点个赞!)
一、网络协议
OSI模型与TCP/IP五层模型
一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。
OSI模型有7层,TCP/IP为五层
爬虫的处理,只需要关注应用层:
- 应用层
- 表示层
- 会话层
2、HTTP发起请求的典型场景
3、HTTPS
HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,TLS由网景( Netscape )公司1995年发布,有时候两者不区分。
SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1。
4、TCP协议的“三次握手”与“四次挥手”
归根结底,开始,停止都是由客户端决定
详解(转载):
https://www.cnblogs.com/AhuntSun-blog/p/12028636.html
https://www.cnblogs.com/AhuntSun-blog/p/12037852.html
5、报文在抓包的时候是如何产生的
报文,通过headers每次经过层级,都会在层级前后加入首位
二、抓包原理
1、爬虫常见抓包工具
Fiddler
Windows平台专用抓包软件(课程演示工具)
Charles
macOS 平台下最好用的抓包分析工具之一
AnyProxy
阿里巴巴开源的 HTTP 抓包工具,基于 NodeJS 实现,可以进行二次开发
Mitmproxy
基于 Python,支持 SSL 的抓包工具。可以使用python代码控制(爬虫的一些 很骚的操作都是用该软件实现)
Wireshark
相对更加底层,更加古老的抓包工具,可以直接从网卡角度抓到包。这个工 具不适合于PC爬虫领域。(PC 99.999%都是http协议【也就是应用层】)
2、fiddler抓包工具原理
结论:
在TCP/IP模型中,Fiddler只能抓到应用层的包。如果想要看到 TCP/UDP、IP 甚至于 mac地址相关的报文,则需要更换抓包工具。这也就是为什么有很多数据包无法被Fiddler/Charles 捕获到的原因
3、HTTP协议工作原理
HTTP并不严格限制在 TCP/IP框架中,事实上HTTP可以在任何互联网协议上,或其他网络上实现。但是目前几乎都是在这个框架下进行实现的。
4、HTTP协议工作原理-浏览器地址栏键入URL后发生了什么?
-
浏览器构建请求行:GET / HTTP/1.1
-
查找强缓存(若命中则直接使用) HTTP/1.1中使用的是Cache-Control
-
浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
-
解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
-
浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
-
服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
-
释放 TCP连接(如果 keep-alive为关闭状态);
-
浏览器将该 html 文本并显示内容;
5、配置fiddler工具
非常棒的文章
https://blog.csdn.net/qq_22803691/article/details/104243501
6、利用fiddler工具autoresponder
6.1 编写规则
丁香人才招聘网
https://www.jobmd.cn/
fiddler抓到的包
添加规则(规则正确匹配到url,那么显示绿色,否则条目显示红色,比如我加了XXX)
将该url,报文响应保存到本地txt文件改名为html,添加规则指向文件
crtl+x快速清理fiddler抓包工具包,然后刷新丁香网
可以看到丁香网下面没有显示数据
并且抓包工具,出现紫色条目
这是因为,本地写了规则,规则是精确,其它非相关的接口并没有执行
更改为EXACT
,记得保存,然后重新刷新丁香
显示了数据
6.2 本地修改映射html文件
pycharm打开规则指向的html文件,添加alert语句
刷新丁香网页,会看到先执行这个语句
6.3 结论
可以利用这一特性,进行调试,魔改!!!等等!一系列操作,debugger啥的
三、chrome开发者工具(DevTool)
DevTool官方文档:https://developers.google.cn/web/tools/chrome-devtools/
非常详细的文章(使用,面板说明都有,此处讲述常用的
)
https://blog.csdn.net/kissazhu/article/details/80865819
1、调试面板说明
下图摘自上述连接博客
2、逐步调试功能
1(Resume):恢复执行,直到下一个断点。如果没有遇到断点,则恢复正常执行
2(Step Over):执行下一行中发生的任何操作,并跳转到下一行
3(Step Into):如果下一行包含一个函数调用,Step Into将跳转到该函数并在该函数的第一行暂停
4(Step Out):执行当前函数的剩余部分,然后在函数调用后的下一个语句处暂停
5(Deactivate Breakpoints):暂时禁用所有断点。用于恢复完整的执行,而不实际删除已有的断点。再次单击可以重新激活断点
3、作用域
当脚本中断的时候,Scope(作用域)窗格将显示当前时刻所有当前定义的属性
4、调用堆栈
当js文件执行的时候,输出执行顺序
5、watch监控特定
实例监听a的值
6、DevTool –Workspaces-Overrides
将文件添加到本地
pycharm打开本地的html,在末尾修改,新增 alert 信息,刷新网页可以看到输出结果
四、运用fiddler工具-重放攻击
以下两个案例网址,私聊回复!!!
以下两个案例网址,私聊回复!!!
以下两个案例网址,私聊回复!!!
1、准备工作
过滤掉图片请求,连接请求
2、post请求规律案例
这是一个网址,分别点击了3次页数,分别返回不同的值,通过fiddler工具能看到
通过重放攻击还原请求
这里只请求一次,可以看到返回的数据并不是原先想要的
跟前面对比,发现,重放一次攻击,前成功返回数据,都是先请求了cityjson然后再请求api接口
试着先重放攻击cityjson,然后再试api
成功得到值
结论:
可以通过session,保持请求第一次后请求第二个api接口
3、headers顺序规律案例
同样的点了4页,都能返回数据,但是相较上面的,是通过一次请求后session再请求API,
而这个API是抓包工具,仅仅一个条目,那么说明只有这一个API
于是pycharm写代码
打开curl 工具 https://curl.trillworks.com/,直接生成python代码
此时通过代码请求API,发现返回的是js文件
- 这里如果开启了fiddler,在pycharm会报错,因此采用fiddler代理,并且证书验证设置false
观察抓包工具,成功捕获的API,和失败的API,经过比对,请求头headers不太相同
利用代码比较工具
https://www.jq22.com/textDifference
复制成功的headers与失败的headers,进行比对
左边是失败的headers,右边是成功的headers,
相对右边有些许不同,但是忽略掉,只调整气位置,根据右边正确的调整大概调整左边位置,将其复制,修改headers,并且代码需要加入headers规则
- python当中requests,并不会根据修改的headers来执行解析请求头
- 所以需要修改指定程序执行顺序,否则这个案例还是失败
- 通过session指定headers,这样就可以保证headers按照指定顺序执行
而后执行代码,成功输出数据