1. wireshark
**ip.dst eq 10.0.0.21**
是用于网络流量分析工具(例如 Wireshark 或 tcpdump)的过滤器表达式。 它的作用是筛选出所有目标IP地址为 10.0.0.21
的数据包
IP.addr == 10.0.0.1 搜索指定ip
1.1. 过滤包
会弹出来的
-
协议过滤:
-
quic
:过滤所有 QUIC 协议的数据包。 -
udp
:过滤所有 UDP 协议的数据包(QUIC 基于 UDP)。 -
tcp
:过滤所有 TCP 协议的数据包。 -
http2
:过滤所有 HTTP/2 协议的数据包。 -
tls
:过滤所有 TLS 协议的数据包。 -
IP 地址过滤:
-
ip.src == 192.168.1.1
:过滤源 IP 为192.168.1.1
的数据包。 -
ip.dst == 192.168.1.1
:过滤目标 IP 为192.168.1.1
的数据包。 -
ip.addr == 192.168.1.1
:过滤源或目标 IP 为192.168.1.1
的数据包。 -
端口过滤:
-
udp.port == 443
:过滤 UDP 端口为443
的数据包(QUIC 通常使用 443 端口)。 -
tcp.port == 80
:过滤 TCP 端口为80
的数据包。 -
tcp.srcport == 8080 过滤 TCP 源端口为
8080
的数据包 -
逻辑运算符:
-
&&
:与(例如quic && ip.src == 192.168.1.1
)。 -
||
:或(例如quic || tls
)。 -
!
:非(例如!tcp
)。
基本 TCP 过滤
tcp
过滤所有 TCP 协议的数据包。tcp.port == 80
过滤 TCP 端口为80
的数据包(HTTP 流量)。tcp.port == 443
过滤 TCP 端口为443
的数据包(HTTPS 流量)。tcp.srcport == 8080
过滤 TCP 源端口为8080
的数据包。tcp.dstport == 22
过滤 TCP 目标端口为22
的数据包(SSH 流量)。
TCP 连接状态过滤
tcp.flags.syn == 1 && tcp.flags.ack == 0
过滤 TCP SYN 包(第一次握手)。tcp.flags.syn == 1 && tcp.flags.ack == 1
过滤 TCP SYN-ACK 包(第二次握手)。tcp.flags.ack == 1 && tcp.flags.syn == 0
过滤 TCP ACK 包(第三次握手)。tcp.flags.fin == 1
过滤 TCP FIN 包(断开连接请求)。tcp.flags.reset == 1
过滤 TCP RST 包(重置连接)。
TCP 数据分析
tcp.payload
过滤包含 TCP 负载的数据包。tcp.len == 100
过滤 TCP 负载长度为100
字节的数据包。tcp.len > 500
过滤 TCP 负载长度大于500
字节的数据包。
TCP 重传和异常
tcp.analysis.retransmission
过滤 TCP 重传的数据包。tcp.analysis.zero_window
过滤 TCP 零窗口数据包(接收方缓冲区已满)。tcp.analysis.window_update
过滤 TCP 窗口更新的数据包。tcp.analysis.duplicate_ack
过滤 TCP 重复确认的数据包。
组合过滤
tcp && ip.src == 192.168.1.1 && tcp.port == 80
过滤源 IP 为192.168.1.1
且端口为80
的 TCP 数据包。(tcp.flags.syn == 1 && tcp.flags.ack == 0) || (tcp.flags.fin == 1)
过滤 TCP 建立连接和断开连接的数据包。tcp.analysis.retransmission || tcp.analysis.zero_window
过滤 TCP 重传和零窗口的数据包。
保存过滤结果
- 在 Wireshark 中应用过滤后,点击菜单栏的
File
->Export Specified Packets
。 - 选择
All packets
或Displayed
。 - 保存为
.pcap
或.pcapng
文件。
示例场景
tcp.port == 80
过滤所有 HTTP 流量(TCP 端口为 80)。tcp.flags.syn == 1 && tcp.flags.ack == 0
过滤 TCP 握手的 SYN 包。tcp.analysis.retransmission
过滤所有 TCP 重传的数据包。tcp && ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
过滤源 IP 为192.168.1.1
且目标 IP 为192.168.1.2
的 TCP 数据包。
1.2. 常见分析
1,
2,
3,
4,Window Full
61622 109.780413297 10.0.0.1 10.0.0.9 openFlow 194 [TCP Window Full] Type: OFPT EXPERIMENTER
是指的发送端发送的数据已经达到的接受窗口的上限。
继而停止发送,等待新的接收窗口的通告
此时接收端返回的是TCP zero window,表示接收端窗口为0
openflow:表示这个数据包是openflow协议, "TCP Window Full"指示符通常表示接收端的TCP接收缓冲区已满。这意味着接收端已经接收了所有能够接收的数据,并且其接收窗口已满,无法再接收更多的数据,直到一些数据被应用程序处理并从缓冲区中移除。 :发送端会根据接收端的接收窗口大小来控制发送的数据量。当接收端的接收窗口为零时,发送端将停止发送新的数据,直到接收端的缓冲区有更多空间。
5,Zero Window
传输层协议TCP—滑动窗口(9)_tcp zerowindow-CSDN博客
Zero Window(0窗口)指的是 TCP 发送方的滑动窗口大小为0,其本质上是因为 TCP 接收方的接收缓存已经满了,没有空间再接收数据。当处于 Zero Window 时,TCP 发送方是不能向对方发送数据的——即使发送也会被对方给怼回来
6,TCP ACKed unseen segment
7,TCP Previous segment not captured
[TCP Previous segment not captured]报文指的是在TCP发送端传输过程中,该Seq前的报文缺失了。一般在网络拥塞的情况下,造成TCP报文乱序、丢包时,会出现该标志。
需要注意的是,[TCP Previous segment not captured]解析文字是wireshark添加的标记,并非TCP报文内容。
例子:
流媒体服务器39.135.135.81,端口80,发送序号Seq=147154的包,长度Len=1360,那么下一个数据包序号应该为Seq=147154+1360=148514,可以看到客户端请求的也是Ack=148514。而服务器下一个包序号为Seq=149874,中间的包丢失了。
8,RST
TCP异常终止的情形
2. tcpdump
你可以使用 host
关键字来筛选目标IP地址。例如:
tcpdump -i eth0 dst host 10.0.0.21
这将捕获所有目标IP地址为 10.0.0.21
的数据包。
tcpdump -i eth0 icmp
筛选eth0端口的icmp包
tcpdump -nni port300781 icmp 这样才能抓到包 用-nni
tcpdump -nni any icmp 抓该节点所有端口的icmp包
tcpdump -nni port300781 icmp -w test.pacp 抓取的数据包保存到文件 **test.pcap**
中 ,导入到wireshark进行分析
还有个抓包工具tshark
21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48
Flags 标识符#
使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:
[S]
: SYN(开始连接)[P]
: PSH(推送数据)[F]
: FIN (结束连接)[R]
: RST(重置连接)[.]
: 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)
使用 **host**
基于IP过滤
- tcpdump host 192.168.10.100
- 根据源ip进行过滤:tcpdump -i eth2 src 192.168.10.100
- 根据目标ip进行过滤:tcpdump -i eth2 dst 192.168.10.200
基于网段进行过滤:net
- tcpdump net 192.168.10.0/24
- 根据源网段进行过滤$ tcpdump src net 192.168
3. iperf
Iperf是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽,具有多种参数和UDP特性。
iperf -s -p 12345 -i 1 -M 1460
iperf -c 10.0.0.1 -p 9190 -i 1