wireshark 协议进行抓包分析
本章内容
文章目录
- wireshark 协议进行抓包分析
-
- 本章所需工具
- 常用协议
- 一、ARP 协议
- 二、ICMP 协议
-
- 2.1 ICMP协议是一个网络层协议
- 2.2 ICMP协议的功能
- 2.3 使用ping 命令来获取 ICMP 包
- 三、TCP 协议
-
- 3.1 模拟TCP会话建立
- 3.2P 的 3次握手
-
- 3.2.1 生成一个图表来看
- 3.2.2 三次握手 流程图
- 3.2.3 三次握手的过程
- 3.3 TCP 的四次挥手
- 四、UDP 协议
-
- 4.1 基本概述
- 4.2 TCP和UDP的对比
- 五、DNS 协议
-
- 5.1 基本概述
- 5.2 DNS 常用的记录
- 六、HTTP 协议
-
- 6.1 基本概述
- 6.2 通信过程
- 总结
本章所需工具
- wireshark
- xshell
常用协议
对应协议关系
一、ARP 协议
- 将IP地址解析为MAC地址
- 地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在IPv4中极其重要。ARP最初在1982年的RFC 826(征求意见稿)[1]中提出并纳入互联网标准STD 37。ARP也可能指是在多数操作系统中管理其相关地址的一个进程
用 Wireshark 抓包分析 ARP 协议
开启抓包—过滤 ARP
使用nmap是基于 ARP 协议进行扫描
[email protected]:~# nmap -sn 192.168.37.133
抓取的数据包
分析第一个包
查看 Address Resolution Protocol(request) ARP 请求包的内容
【ARP协议字段解读】
Hardware type //硬件类型,标识链路层协议
Protocol type //协议类型,标识网络层协议
Hardware size //硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)
Protocol size //协议地址大小,标识IP地址长度,这里是4个字节(32bit)
Opcode //操作代码,标识ARP数据包类型,1表示请求,2表示回应
Sender MAC address //发送者MAC
Sender IP address //发送者IP
Target MAC address //目标MAC,此处全0表示在请求
Target IP address //目标IP
分析第二个应答包
【ARP协议字段解读】
Hardware type //硬件类型,标识链路层协议
Protocol type //协议类型,标识网络层协议
Hardware size //硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)
Protocol size //协议地址大小,标识IP地址长度,这里是4个字节(32bit)
Opcode //操作代码,标识ARP数据包类型,1表示请求,2表示回应
Sender MAC address //发送者MAC
Sender IP address //发送者IP
Target MAC address //目标MAC,此处全0表示在请求
Target IP address //目标IP
小结:
两个数据包通信的过程,
192.168.37.133 广播:谁有 192.168.37.138 的MAC地址?
192.168.37.138 应答:129.168.37.133 的MAC地址时 XXXXXXXXXXXXX
二、ICMP 协议
互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决
2.1 ICMP协议是一个网络层协议
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
所以我们就需要一种协议来完成这样的功能–ICMP协议
2.2 ICMP协议的功能
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
注意几点
- ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
- ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6
重启启用wireshark 然后筛选ICMP 协议的数据包
2.3 使用ping 命令来获取 ICMP 包
[email protected]:~# ping 192.168.37.133 -c 1
第一个ICMP 包分析,请求包
第二个ICMP 包分析,应答包
小结:
工作过程:
- 本机发送一个ICMP Echo Request 的包
- 接受方返回一个 ICMP Echo Reply
三、TCP 协议
3.1 模拟TCP会话建立
在筛选器中输入 TCP
使用xshell 远程连接 kali Linux 就会捕捉到完整的TCP 三次握手的连接
抓取完成 停止分析数据包
3.2P 的 3次握手
分析第一个数据包 SYN 数据包
展开之后
在分析第二个数据包
第三个数据包
自此三次握手过程结束
3.2.1 生成一个图表来看
勾选 限制显示过滤器–>流类型-TCP Flows
3.2.2 三次握手 流程图
3.2.3 三次握手的过程
第一次握手:客户端将标志位SYN 置为 1,随机产生一个值 seq=J,并将该数据包发送给服务器端,客户端进入 SYN_SENT 状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1 知道客户端请求建立连接,服务器端将标志位 SYN 和 ACK 都置为 1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入 SYN_RCVD 状态。
第三次握手:客户端收到确认后,检查ack 是否为 J+1,ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=K+1,并将该数据包发送给服务器端,服务器端检查 ack 是否为K+1,ACK 是否为 1,如果正确则连接建立成功,客户端和服务器端进入 ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
3.3 TCP 的四次挥手
清空数据包 并输入TCP筛选
打开xshell 在终端输入 exit
四次挥手数据包
自此四次挥手结束
我们分析一下过程,我们在终端输入 EXIT 实际上是在我们 Kali 上执行的命令,表示我们 SSHD 的Server 端向客户端发起关闭链接请求。
第一次挥手:服务端发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入FIN_WAIT_1 状态
第二次挥手:客户端收到 FIN 后,知道不会再有数据从服务端传来,发送 ACK 进行确认,确认序号为收到序号+1(与 SYN 相同,一个 FIN 占用一个序号),客户端进入 CLOSE_WAIT 状态。 2
第三次挥手:客户端发送 [FIN+ACK] 给对方,表示自己没有数据要发送了,客户端进入
LAST_ACK 状态,然后直接断开 TCP 会话的连接,释放相应的资源。
第四次挥手:服务户端收到了客户端的 FIN 信令后,进入 TIMED_WAIT 状态,并发送 ACK 确认消息。服务端在 TIMED_WAIT 状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的ACK 并正确关闭了进入 CLOSE 状态,自己也断开了 TCP 连接,释放所有资源。当客户端收到服务端的ACK 回应后,会进入 CLOSE 状态并关闭本端的会话接口,释放相应资源。
四、UDP 协议
4.1 基本概述
用户数据报协议(英语:User Datagram Protocol,缩写:UDP;又称用户数据包协议)是一个简单的面向数据报的通信协议,位于OSI模型的传输层。
扩展
4.2 TCP和UDP的对比
功能项 | UDP | TCP |
---|---|---|
连接服务的类型 | 无连接 | 面向连接 |
维护连接状态 | 不维护连接状态 | 维持端到端的连接状态 |
对应用层数据的封装 | 对来自应用层数据直接封装为数据报,用端口号标识应用层程序 | 对应用层数据进行分段和封装,用端口号标识应用层程序 |
数据传输 | 不确保可靠传输 | 通过序列号和应答机制确保可靠传输 |
流量控制 | 无流量控制机制 | 使用滑动窗口机制控制流量 |
五、DNS 协议
5.1 基本概述
域名解析系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
这里DNS是基于UDP的所以我们在筛选器中输入 UDP
我们用火狐浏览器访问 mail.163.com 并抓取数据包
客户端问 :“请问 mail.163.com 的A 记录是什么?”
服务器问“是192.168.37.2(这里是kali Linux的网关,不代表服务器的地址,只是交给网关)”
5.2 DNS 常用的记录
解析记录 | 说明 |
---|---|
A 记录 | 将域名指向只一个IPv4地址,需要增加A记录 |
CNAME 记录 | 将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录,这个域名一般是主机服务商提供的一个域名 |
MX 记录 | 将邮箱定向到电子邮件服务器 |
TXT 记录 | 运行管理员在记录中存储文本注释 |
NS 记录 | 存储 DNS 条目的名称服务器 |
SRV 记录 | 指定特定服务的端口 |
PTR 记录 | PTR 记录是A记录的逆向记录,又称 IP 反查记录或指针记录,负责将 IP 反向解析为域名 |
六、HTTP 协议
6.1 基本概述
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当
还是筛选tcp
使用 kali Linux 打开终端输入
[email protected]:~# curl -I baidu.com //curl 是一个命令行下的文件传输工具,这里用来发送HTTP请求 -I 打下表示仅返回头部信息
6.2 通信过程
我们可以看到TCP的三次握手和四次挥手
这里的38、41 是HTTP数据包
第一步:我们发送了一个HTTP的HEAD 请求
第二步:服务器收到了我们发送的包,并返回了一个Seq/ACK确认包
第三步:服务器将HTTP的头部信息返回给我们客户端, 状态码为 200 OK 表示页面正常
第四步:客户端将返回的头部信息向服务器确认,Seq/ACK进行确认
发送完成之后客户端会发送 FIN/ACK来关闭链接的请求
我们来追踪TCP流看一下发送的内容
发现一模一样
客户端和百度交互的流量图
总结
本章学习了如何在现网中,分析真实的网络数据包,及TCP和一些常用的协议的原理,以及wireshark的基本操作,方便以后在分析网络故障的同时,来找到原因,并解决。