八、抓包与网络协议
8.1 抓包工具怎么用
我原来的公司对于抓包这块,在App的测试用得比较多。我们会使用fiddler抓取数据检查结果,定位问题,测试安全,制造弱网环境;
如:抓取数据通过查看请求数据,请求行,请求报头,请求正文,信息是否正确去检查结果,
如果是以4开头的话就有可能是前端问题一般我会到前端排查,以5开头就有可能是后端
问题我就会到后端排查;如果是200的话,就需要检查请求行,请求报头,请求正文是否正确,
如果请求错误就是前端问题,如果请求没有问题,那就是后端问题,看后端问题服务器运行日志,
是否包含 exception,error或根据时间点去看日志。
测试安全,抓取数据查看用户的感敏信息有没有进行加密显示,还有就是把发送请求的数据篡改是否成功。
弱网环境,诵过 fiddler工具选择 Customize Ruels...(Ctr+R)调出定义脚本编辑器找到
“if (m_SimulateModem)”设置上行下行网速,然后把
Rules-> Performance-> Simulate Modem Speeds选中生效
常用抓包工具有:浏览器中F12, fiddler, Charles(青花瓷), wireshark
8.2 如何抓取https的包
1、设置 Tools=> Option=>勾选 Decrypt Https traffic=>勾选 lgnore server
certificate errors(unsafe)
2、打开https网页就可以成功抓取了
3、还可以 Fiddler添加过滤器(Filters):只抓取指定iP的数据
8.3 如何抓取手机的包
1、开启 Fiddler的远程连接
Fiddler主菜单Toos- Options-> Connections>勾选 Allow remote computers to
2、重启 Fiddler,更新刚开启的远程配置
3、然后手机和电脑需要在同一个局域网,抓取http手机设置代理就可以,要抓取https包,手机需要安装一个fiddler证书
1、fder工具生成一个证书,发送手机上面安装
2、通过手机浏览器打开安装证书界面192.168.3.197:8888
ip地址是用 fiddler工具的电脑的ip地址,fiddler工具端口号的8888
3、点击下载证书,会提示,输入手机锁屏密码
4、给证书命名,名字随意,其他默认就ok
5、点击确定,安装成功,然后就可以抓取https的包了
8.4 网络协议了解多少?
原来我们用得比较多的协议是http和https以及tcp协议
http和https都是超文本协议,浏览器发送数据请求基本用的都是他们,不同的是https
在http的基础上增加了ssl加密协议,http的默认端口是80,http:的默认端口是443,
https收费,http免费。
tcp协议的话,作用在传输层,在发送请求前会有三次握手,是面向连接的协议,传输过程比较可靠
udp协议的话,作用在传输层,面向非连接协议,传输过程相对tcp不可靠,传输大量数据
8.5 请求方式有哪些?
常用:get、post
不常用:delete、put、head、option
8.6 get跟post请求的区别
1)get请求的参数有长度限制,post没有
2)get请求参数在url上传输,post的参数在请求正文中传输。post比get传输更安全
3)get只能接收ascall码参数,而post没有限制
4)get请求的时候,只请求一次,而post请求两次,第一发送请求头相关信息,第二次
再发送请求正文,(只有部分浏览器2次请求)
8.7 http跟https的区别
1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用
2.http是超文本传输协议,信息是明文传输https则是具有安全性的ssl加密传输协议
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
4.http的连接很简单,是无状态的;Https协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
8.8 为什么要使用cookie和session:http是无状态协议
第一次登录,发送用户信息给到服务器,服务器把用户信息保存在session中服务器响应数据给客户端,响应数据中有包含session的先关用户信息
客户端接收到服务器session信息,把session中相关的用户信息保存在cookie中
第二次登录,客户端发送请求,并携带cookie,服务端可以直接验证cookie值,如果用户已经登录过,可以免登录
8.9 cookie跟 session的区别
在网站中http请求是无状态的,也就是说即使第一次和服务器连接后并且登录成功后,
第二次请求服务器依然不能知道当前请求是哪个用户,cookie的出现就是为了解决这个问题,
第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的 cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用 cookie只能存储一些小量的数据。
session和 cookie的作用有点类似,都是为了存储用户相关的信息,不同的是,cookie是存储在本地浏览器,而session存储在服务器.存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的
8.10 OSI七层网络模型
(1)参考模型:只是提供给生产商或者软件开发商参考的模型
(2)开发系统互联
(3)有七层
8.11 TCP模型
有四层:
应用层 (telnet.stp.htp),传输层( CP UDP)、网络层,中数据链路层
8.12 TCP和UDP的区别?
(1)TCP面向连接、而UDP面向非连接
(2)TCP相对UDP更可靠
(3)TCP应用场景,用于传输少量数据,而UDP用于传输大量数据
(4)TCP传输的数据相对UDP慢
8.13 tcp的三次握手是怎么实现的?
(1)客户端给服务器发送报文syn=1和序列号Seq=x
(2)服务器接收到客户端的请求,服务器响应syn=1,ack=x+1,seq=y
(3)客户端接收到服务器的响应,返回给服务器,ack=y+1,seq=z
8.14 http协议包含哪些内容
(1)请求信息
1)请求行:请求方式、请求地址http版本1.1
2)请求头
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头
Cache- Control:no- cache 缓存
Connection:close/keep-aive 是否关闭或者保持连接
Accept-Charset:ios-859-1 字符集
Accept-Encoding:gzip.deflate 编码格式
Accept-Language:zh-cn 语言
Authorization:服务器授权验证
Host:主机
User-Agent:
Location:重定向
Server:服务器版本信息
Content-Encoding:实体报头的编码格式
请求正文
data
(2)响应信息
1)状态行:http版本、状态码、状态信息
2)响应头:跟请求头一样
3)响应正文:
8.15 http状态码有哪些
1xx需要继续发送请求
2xx成功
3xx需要重定向
4xx客户端请求数据有误
5xx服务器响应错误
6xx服务器响应错误
常见状态码:400、404、200、500、302、501、504
101服务器根据客户端的请求切换协议,只能切换到更高级的协议,
例如,切换到HTTP的新版本协议
102(代表处理将被继续执行)由 WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行
2开头这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
200(成功)服务器已成功处理了请求,通常,这表示服务器提供了请求的网页
201(已创建)请求成功并且服务器创建了新的资源
202(已接受)服务器已接受请求,但尚未处理
203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源
204(无内容)服务器成功处理了请求,但没有返回任何内容
205(重置内容)服务器成功处理了请求,但没有返回任何内容
206(部分内容)服务器成功处理了部分GET请求
207(代表之后的消息体将是一个XML消息),并且可能依照之前子请求数量的不同,包含
系列独立的响应代码
3开头(请求被重定向)表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置.服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置
302(临时移动)服务器目前从不同位置的网页响应请求,
但请求者应继续使用原有位置来进行以后的请求
303(查看其他位置)请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。
304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容
305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,
还表示请求者应使用代理。
307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4开头(请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
400(错误请求)服务器不理解请求的语法
401(未授权)请求要求身份验证,对于需要登录的网页,服务器可能返回此响应
403(禁止)服务器拒绝请求
404(未找到)服务器找不到请求的网页
405(方法禁用)禁用请求中指定的方法
406(不接受)无法使用请求的内容特性响应请求的网页
407(需要代理授权)此状态代码与401(未授权)类似,但指定请求者应当授权使用代理
408(请求超时)服务器等候请求时发生超时
409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件
413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力
414(请求的URL过长)请求的URL(通常为网址)过长,服务器无法处理
415(不支持的媒体类型)请求的格式不受请求页面的支持
416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码
417(未满足期望值)服务器未满足期望请求标头字段的要求
5开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误
这些错误可能是服务器本身的错误,而不是请求出错
500(服务器内部错误)服务器遇到错误,无法完成请求
501(尚未实施)服务器不具备完成请求的功能,例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应,(比如:nginx里
设置了反向代理,自己代理给自己,形成了死循环,造成大量的访问日志,每秒上万)
503(服务不可用)服务器目前无法使用(由于超载或停机维护),通常,这只是暂时状态。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求
505(HTTP版本不受支持)服务器不支持请求中所用的HTTP协议版本
8.16 post申请方式,用get会报什么错误。
404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现,没有信息能够告诉用户这个状况到底是暂时的还是永久的,假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址,404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下,出现这个错误的最有可能的原因是服务器端没有这个页面。
8.17 http协议提交请求头内容
Accept-Charset:浏览器能够显示的字符集
Accept- Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何 Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL
User-Agent:浏览器的用户代理字符串
Content-Type:请求数据的格式或者是类型
近几千道题+答案,太多了这里就展示了其中的一部分如果大家有需要的话可以点击文章末尾的小卡片备注000领取哈
总结:下方是作者花费三个月打造的软件测试道测试开发全职业生涯资料包,有需要的话可以点击文章末尾的小卡片备注000领取哈