Python7 ---- TCP-IP协议与抓包
TCP-IP协议与抓包
输入网址后发生了什么
-
输入
url
统一资源定位器uniform resource locator
url
组成https://www.baidu.com/ 协议://域名[:端口]/路径 file:///H:/BaiduNetdiskDownload/
url
作用
定位指定的资源.url是uri的一个子集, uri是唯一标识符的意思. 身份证可以是uri, 但不是url.
-
DNS解析
域名系统Domain Name System
, 将域名解析为IP
地址- 域名解析流程
域名(www.baidu.com) ->DNS
服务器->返回真实的IP
地址36.152.44.96:443
-> 通过IP
地址访问服务器
- 域名解析流程
-
客户端与服务器建立连接.
客户端和服务端要互相确认身份, 建立连接通道后再发送数据 -
客户端正式向服务端发送请求.
-
服务端处理请求并返回结果
-
浏览器接收到响应后, 做相应的渲染
TCP/IP五层协议
https://www.cnblogs.com/xjtu-lyh/p/12416763.html
-
应用层
为进程(客户端应用)和进程(服务器应用)之间提供服务. 应用层协议定义了应用之间进行数据交互的方式.浏览网页 网易云 用python模拟请求
- 应用层协议
- HTTP/HTTPS(超文本传输协议)
- DNS(域名系统)
- FTP(文件传输协议)
- SMTP(邮箱传输协议)
- 应用层协议
-
传输层
负责向两个主机应用进程的通信提供服务.一个主机可以开启不同的应用, 同不同的服务器之间进行通信, 但是都是共用一个传输服务来发送和接受信息
进程 <---> 进程- 传输层协议
-
TCP(传输控制协议)
提供面向连接, (尽可能)可靠的数据传输服务.一对一
面向连接指的就是, 客户端和服务端进行三次交互验证, 也就是TCP三次握手. 建立连接后才可以发送数据.
- 文件传输(FTP)
- 浏览网页(HTTP)
-
UDP(用户数据协议)
提供无连接的, 不保证数据传输的可靠性一对多, 一对一, 多对多...
- 直播
- 实况游戏,FPS
-
- 传输层协议
-
网络层
决定了数据的转寄和路径选择, 封装和分组运输层产生的报文段/用户数据段主机 <---> 主机
- 网络层协议
- IP协议
- 公网IP
也就是指的传统IP地址, 是唯一的. - 局域网IP
ipconfig
- 公网IP
- IP协议
- 网络层协议
-
数据链路层
负责两台主机之间的数据传输, 向网路层提供数据传输服务网卡 <---> 网卡
- 数据链路层的作用
比特流在传输媒介上传输时肯定有误差, 数据链路层的作用就是检错和纠错- *流量控制
- 差错检测
- 差错控制
- 数据链路层的作用
-
物理层
物理层再局部局域网上传送数据帧, 在设备节点传输比特流光纤 <---> 光纤
- 物理层和数据链路层
物理层才是真正传输数据的, 数据链路层是用来检查数据完整性的.
- 物理层和数据链路层
课后作业
-
讲清楚浏览器地址栏敲下
url
发生了什么?
客户端请求一个域名
客户端请求DNS,域名解析为IP返回给客户端
客户端向服务端发送请求,建立连接
服务端处理请求,返回结果
客户端浏览器渲染结果 -
五层协议有哪五层, 举例说明.
应用层:http/https/ftp
传输层:TCP/UDP
网络层:数据包的路径选择
数据链路层:提供传输服务
物理层:物理上传输数据帧
理解TCP/IP协议
-
什么是TCP/IP协议
TCP/IP
并不是单个协议, 而是指一组协议的集合, 又称TCP/IP
协议族. -
TCP/IP的作用
起到了应用和硬件的之间承上启下的作用.手机的APP应用 -> 路由器 -> 光猫 -> 运营商网络 -> 互联网
TCP/IP三次握手
为了建立可靠的TCP
连接, 尽可能地保证数据传输的正确性.
-
三次握手的过程
- 客户端向服务端发送带有
SYN(同步序列编号)
标识的数据包 --------------------------服务端确认了客户端的发送能力正常 - 服务端向客户端发送了带有
SYN-ACK(确认字符)
标识的数据包-----------------------服务端确认了自己接受能力是正常 - 客户端向服务端返回带有
ACK
标识的数据包-----------------------------------------------服务端确认了自己发送能力, 客户端接受正常
- 客户端向服务端发送带有
-
第2次握手已经传回了
ACK
, 为什么服务端还要返回SYN
?
通知客户端, 接收到的信号确实是发送的信号, 表明了客户端到服务端的通信是正常的.
TCP/IP四次挥手
-
四次挥手的过程
我们以客户端作为主动关闭方来描述四次挥手过程
- 客户端向服务端发送了一个
FIN(finish)
数据包-------------------------------------关闭客户端到服务端的连接通道 - 服务端收到
FIN
后, 返回了ACK
数据包----------------------------------------------------服务端已经知道了客户端到服务端的连接通道已关闭 - 服务端发送
FIN
数据包至客户端, 关闭与客户端的连接------------------------------目的是关闭服务端到客户端的连接通道 - 客户端返回
ACK
数据包确认------------------------------------------------------------------通知服务端客户端已经知道了服务端到客户端之间的连接通道已关闭
- 客户端向服务端发送了一个
HTTPS
-
https加密的过程
-
客户端向服务端发送通信请求
-
服务端返回给客户端证书和密钥
-
客户端通过CA中心验证证书的真实性
-
客户端完成认证之后, 使用公钥对发送数据进行加密, 发送给服务端.
- 非对称加密
16 = 2* 8 也可以是 4 * 4 公钥就是拿到了16这个结果 私钥就是某个因数2 通过这样的方式才可以得出唯一解8
- 非对称加密
-
服务端收到加密后的请求数据后, 使用私钥进行解密.
-
服务器和客户端使用对称加密进行通信
-
-
中间人攻击
插入到客户端和服务端之间的通信, 对服务端伪造客户端, 对客户端伪造服务端, 拦截通信产生的数据.
- 产生的条件
我们的客户端要主动信任中间人的证书
- 产生的条件
课后作业
- 讲述TCP/IP三次握手
- 讲述TCP/IP四次挥手
- 讲述HTTPS加密的过程
抓包
抓包其实就是中间人攻击, 只是我们会主动信任像fiddler这样的代理软件.
对于服务端, 它伪装成客户端. 对于客户端, 它伪装成服务端.
-
抓包软件
- Fiddler
https://www.telerik.com/fiddler
Fiddler Classic https://www.telerik.com/download/fiddler - Charles
- wireshark
- Fiddler
-
web端抓包
现代互联网环境几乎都是https协议的网站-
信任证书
TOOLs -> Options -> HTTPS - 勾选Decrypt HTTPS traffic - 右上角点击Actions - Trust Root Certificates
-
-
App端抓包
下载夜神模拟器
- 打开远程终端连接
Rules -> Options -> Connections -> Allow remote computes to connect
-
把手机/模拟器的代理指向fiddler
- wifi调出设置的时候要长按
- 查看当前fiddler所在pc本地局域网ip
- ipconfig/ifconfig
-
在代理项中填写ip地址和fiddler端口, 默认是8888
-
信任证书
-
App有一定的反爬措施, 第一件事就是修改请求协议
- 双向验证
需要客户端也带上证书
- 双向验证
-
解决请求协议上的反爬措施
- 安装VirtualXposed_0.18.2, JustTrustMe
- 打开远程终端连接
模拟请求
- PostMan简单使用
- GET
- POST
- form_data
参数表单 - x-www-form-urlencoded
如果headers中content-type为x-www-form-urlencoded
, 那么我们需要在当前选项下填写参数 - raw
请求的真实body内容
- form_data
需要注意下x-www-form-urlencoded POST时的问题,需要赶写raw进行一层转换,才能获取到真实的数据,或者直接使用raw
课后作业
- 学会用fiddler抓包https请求
- 学会用fiddler抓包手机app中的请求
- 学会使用postman模拟GET, POST请求.