wireshark
1. 安装
2. 配置
3. 使用
3.1 抓包
Wireshark 是一款强大的网络协议分析器,它允许用户捕获并详细分析网络上的数据包。在 Wireshark 中,数据包被分层展示,每一层对应着网络协议栈的不同部分。以下是 Wireshark 中各个层的表示及其描述:
物理层 (Physical Layer)
- 在 Wireshark 中,物理层的数据通常以帧(Frame)的形式展示。帧的开头通常包含时间戳、源和目标地址等基本信息。
数据链路层 (Data Link Layer)
- 对于以太网协议,Wireshark 会展示以太网帧的详细信息,包括源和目的 MAC 地址、类型/长度字段等。
- 对于其他类型的网络,如 Wi-Fi 或令牌环网,数据链路层的展示会有所不同,但通常会包含类似于 MAC 地址的标识符和帧类型信息。
网络层 (Network Layer)
- 对于 IP 协议,Wireshark 会展示 IP 头部信息,包括源和目的 IP 地址、生存时间(TTL)、协议类型等。
- 对于其他网络层协议(如 ICMP、IGMP 等),Wireshark 也会展示相应的头部信息。
传输层 (Transport Layer)
- 对于 TCP 协议,Wireshark 会展示 TCP 头部信息,包括源和目的端口号、序列号、确认号、窗口大小、标志位等。
- 对于 UDP 协议,Wireshark 会展示 UDP 头部信息,包括源和目的端口号、长度和校验和等。
应用层 (Application Layer)
- 应用层协议的数据通常位于数据包的最上层。Wireshark 可以解析多种应用层协议,如 HTTP、FTP、SMTP、DNS 等,并展示相应的请求和响应信息。
- 例如,对于 HTTP 协议,Wireshark 会展示请求方法(GET、POST 等)、URL、HTTP 版本以及请求和响应头部信息。
在 Wireshark 中,用户可以通过不同的颜色来区分不同协议的数据包。例如,TCP 数据包通常以绿色表示,而 UDP 数据包则以浅蓝色表示。此外,用户还可以使用过滤器功能来仅显示特定协议或满足特定条件的数据包。
总之,Wireshark 通过将数据包分层展示,使得用户能够深入了解网络通信的各个方面,从而进行故障排查、性能优化或安全分析等工作。
3.2 分析
ARP协议
ARP(Address Resolution Protocol,地址解析协议)是用于将网络层(IP层)的32位IP地址解析为数据链路层(MAC层)的48位物理地址的协议。
以下是ARP请求和响应报文的基本格式,如下表所示:
ARP请求和响应报文格式
字段名称 | 字节长度 | 描述 |
---|---|---|
硬件类型 | 2 | 表示发送和接收ARP报文的硬件地址类型,以太网中通常为1(表示以太网地址)。 |
协议类型 | 2 | 表示要映射的协议地址类型,对于IP地址通常为0x0800。 |
硬件地址长度 | 1 | 硬件地址(如MAC地址)的长度,以太网中为6。 |
协议地址长度 | 1 | 协议地址(如IP地址)的长度,通常为4。 |
操作类型 | 2 | 表示ARP请求或响应的类型。常见的操作类型有1(ARP请求)和2(ARP响应)。 |
发送方硬件地址 | 变量 | 发送ARP报文的设备的硬件地址(例如MAC地址)。在ARP请求中,这个字段可能是未定义的,即全0。 |
发送方协议地址 | 变量 | 发送ARP报文的设备的协议地址(例如IP地址)。 |
目标硬件地址 | 变量 | 对于ARP请求,这是所请求的物理地址,通常为全0。对于ARP响应,这是请求方的物理地址。 |
目标协议地址 | 变量 | 对于ARP请求,这是所请求的IP地址。对于ARP响应,这是请求方的IP地址。 |
请注意,硬件地址和协议地址的长度是变量,这取决于硬件类型和协议类型字段的值。在以太网中,硬件地址长度为6字节,协议地址长度为4字节。操作类型字段决定了ARP报文的类型,例如ARP请求或ARP响应。在ARP请求中,发送方硬件地址可能是未定义的,而目标硬件地址通常为全0,表示正在请求该IP地址对应的MAC地址。在ARP响应中,这些字段将被填充为正确的值。
IPV4协议
共20字节,详细如下表所示:
字段名称 | 比特长度 | 描述 |
---|---|---|
版本 | 4 | 表示IP协议的版本号,目前为4。 |
首部长度 | 4 | 表示IP报文的首部长度,以4字节为单位。 |
服务类型 | 8 | 表示IP报文的服务类型,用于提供服务质量(Quality of Service)和流量控制。 |
总长度 | 16 | 表示IP报文的长度,以字节为单位。 |
标识 | 16 | 表示IP报文的标识符,用于区分相同源地址和目的地址的多个IP数据报。 |
标志 | 3 | 表示IP报文的标志,用于控制分片和生存时间等。 |
段偏移量 | 13 | 表示IP报文的分段偏移,用于将大报文分割成更小的分段进行传输。 |
生存时间 | 8 | 表示IP报文在路由器之间传递的最大跳数,通常为255。 |
协议 | 8 | 表示IP报文所封装的数据协议,如TCP、UDP等。 例如01代表ICMP |
头部校验和 | 16 | 表示IP报文的头部校验和,用于检验IP报文在传输过程中是否发生错误。 |
源地址 | 32 | 表示发送IP报文的源地址,即发出请求的IP地址。 |
目的地址 | 32 | 表示接收IP报文的目的地址,即请求的目标IP地址。 |
可选 | 可变 | 用于存储可选字段,如选项、填充等。 |
数据 | 可变 | 用于存储IP报文的数据部分,可以是TCP、UDP等协议的数据。 |
ICMP协议
ICMP(Internet Control Message Protocol,互联网控制消息协议)是TCP/IP协议族中的一个子协议,用于在IP主机、路由器之间传递控制消息。如下表所示:
字段名称 | 字节长度 | 描述 |
---|---|---|
类型(Type) | 1 | ICMP报文的类型,标识了报文的种类和用途。例如,类型3表示目标不可达,类型8表示回显请求,0代表回显应答等 |
代码(Code) | 1 | 对于某些类型,这个字段进一步描述同一类型的不同情况或错误代码。对于不需要进一步细分的情况,此字段的值通常为0。 |
检验和(Checksum) | 2 | 用于检验整个ICMP报文的完整性。发送方计算报文的校验和,接收方也进行同样的计算,并比较结果,以验证报文在传输过程中是否发生错误。 |
标识符(Identifier) | 2 | 对于需要匹配的请求和响应报文(如回显请求和回显响应),此字段用于标识相关的报文对。 |
序列号(Sequence Number) | 2 | 与标识符字段一起使用,为匹配的请求和响应报文提供进一步的区分。 |
数据(Data) | 可变 | 根据ICMP报文的类型,可能包含附加的数据字段。例如,在回显请求和回显响应中,此字段包含发送的数据。 |
ICMP报文通常作为IP数据报的数据部分进行传输,因此还需要加上IP数据报的首部才能形成完整的IP数据报。 上述表格中的字节长度是针对ICMP报文本身的字段,不包括IP数据报的首部。
ICMP协议提供了一组丰富的控制消息,用于报告错误情况、诊断网络问题以及执行其他网络管理任务。通过解析ICMP报文中的各个字段,网络管理员和应用程序可以获取有关网络状态和性能的重要信息。
TCP协议
TCP 三次握手过程:
- 第一次握手:建立连接时,客户端发送SYN包(SYN=1,seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认。其中,SYN表示这是握手报文,seq表示发送的数据包序列号。
- 第二次握手:服务器收到SYN包后,确认客户端的SYN(ACK=1,ack=x+1),同时自己也发送一个SYN包(SYN=1,seq=y),即SYN+ACK包。此时,服务器进入SYN_RECV状态。
- 第三次握手:客户端收到服务器的SYN+ACK包后,向服务器发送确认包ACK(ACK=1,ack=y+1,seq=x+1)。当这个包发送完毕,客户端和服务器都进入ESTABLISHED状态,完成TCP三次握手。
需要注意的是,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。同时,TCP协议通过三次握手确保了数据传输的可靠性和稳定性。
- 依次点击
统计
,流量图
,类型选择:TCP流
用于查看TCP握手过程
TCP协议段格式: TCP(传输控制协议)的协议段格式包含多个关键字段,如下表所示:
字段名称 | 长度(比特) | 长度(字节) | 描述 |
---|---|---|---|
源端口号 | 16 | 2 | 表示发送端口号,用于标识发送数据的源应用程序。 |
目标端口号 | 16 | 2 | 表示接收端口号,用于标识接收数据的目标应用程序。 |
序列号 | 32 | 4 | 标识发送数据的起始位置。每发送一次数据,序列号就会累加相应的字节数。 |
确认应答号 | 32 | 4 | 表示接收端期望下一次收到的数据的序列号。用于实现可靠传输和流量控制。 |
数据偏移量 | 4 | 指示TCP头部中固定部分的长度,以4字节为单位。 | |
保留位 | 6 | 当前未使用,通常设置为0。 | |
控制位 | 6 | 包含多个标志位,用于控制TCP连接的状态和行为,如SYN、ACK、FIN等。 | |
窗口大小 | 16 | 2 | 表示接收端当前可用的缓冲区大小,用于实现流量控制。 |
校验和 | 16 | 2 | 用于检验TCP头部和数据的完整性。 |
紧急指针 | 16 | 2 | 当URG标志位被设置时,该字段表示紧急数据的偏移量。 |
选项 | 可变 | 可变 | 包含一些可选的TCP参数,如最大段大小(MSS)、窗口扩大因子、时间戳等。 |
填充 | 可变 | 可变 | 用于确保TCP头部达到最小长度,通常是4字节的倍数。 |
请注意,上述表格中的长度(字节)是通过将长度(比特)除以8得到的。TCP协议通过这些字段的详细设置,实现了数据的可靠传输、流量控制、连接管理等功能。在TCP协议的实际应用中,每个字段都发挥着至关重要的作用,共同确保网络通信的稳定性和可靠性。
断开四次挥手:
TCP断开连接的四次握手流程如下:
- 第一次握手:客户端向服务器发送一个FIN报文,用来关闭客户到服务器的数据传送。客户端进入FIN_WAIT1状态,等待服务器回发的ACK。
- 第二次握手:服务器收到FIN报文后,发送一个ACK应答报文给客户端,确认序号为收到的序号加1。服务器进入CLOSE_WAIT状态,等待关闭状态。客户端收到ACK报文后,进入FIN_WAIT2状态,等待服务器发来的FIN报文。
- 第三次握手:服务器关闭与客户端的连接,发送一个FIN报文给客户端。服务器进入LAST_ACK状态,等待客户端发来的ACK确认报文。
- 第四次握手:客户端收到服务器的FIN报文后,向服务器发送一个ACK应答报文,确认序号设置为收到序号加1。服务器收到ACK报文后,进入CLOSED状态,连接彻底关闭。客户端在发送完ACK应答报文后,也进入CLOSED状态。
在四次握手过程中,等待计时器(TIME-WAIT)和最长报文段寿命(MSL)起到重要作用。等待计时器确保发送方的ACK可以到达接收方,防止已失效连接请求报文段出现在此连接中。MSL一般设置为2分钟,等待计时器等待的时间为2MSL。
总的来说,TCP通过四次握手来优雅地释放一个已经建立的连接,确保数据传输的完整性和可靠性。
UDP协议
DHCP协议
HTTP协议
- 在http上,右键
追踪流
,可以查看http报文
DNS协议
IGMP协议
3.3 过滤
# 过滤ip地址
ip.addr == 192.168.0.104
# 过滤ip地址和端口
ip.addr == 192.168.0.104 && tcp.port == 80
# 过滤tcp端口
tcp
# 过滤协议
ip.proto == 17
# 过滤tcp的ack和syn
tcp.flags.ack == 0 and tcp.flags.syn == 1
# 过滤tcp的fin
tcp.flags.fin == 1
# 本机发给网关
ip.src_host == 192.168.10.99 and ip.dst_host == 192.168.10.1
# MAC地址
eth.dst==02:00:00:48:00:45 || eth.src==02:00:00:48:00:45
# MAC也可以这样写
eth.addr == 66:55:44:33:22:10
3.4 USB过滤
# wireshark不仅仅可以用于抓包网络,还可以借助USBPcap抓取usb数据
#
# 相对bushound:
# 【优点】信息完整,且自带解析
# 【缺点】每次抓包都需要重新设置过滤条件
#
usbms # 筛选scsi设备
usbccid # 筛选usbccid设备
# 通过usbms获知usb设备信息,随后可以过滤usbms完整的流程
usb.src contains 1.6 || usb.dst contains 1.6
USB的常用协议,wireshark自带解析,简单示例如下:
DEVICE DESCRIPTOR
bLength: 18
bDescriptorType: 0x01 (DEVICE)
bcdUSB: 0x0110
bDeviceClass: Device (0x00)
bDeviceSubClass: 0
bDeviceProtocol: 0 (Use class code info from Interface Descriptors)
bMaxPacketSize0: 64
idVendor: xxxx
idProduct: xxxx
bcdDevice: 0x0001
iManufacturer: 1
iProduct: 2
iSerialNumber: 0
bNumConfigurations: 1