wireshark分析网络
只有当你不把努力当做努力时,你才能沉迷于一件事,才能埋头苦干,这是才能的证明。
一、抓包过滤器的用法
二、使用Expert info排障
三、TCP的常见信息
四、TCP三次握手
五、在linux中使用tcpdump
一、抓包过滤器的用法
1、Wireshark主要提供两种的过滤器
a、捕获过滤器:当进行数据包捕获时,只有那些满足给定的包含/排除表达式的数据包才会被捕获。
b、显示过滤器:根据指定的表达式用于在一个已经捕获的数据包集合中,只显示需要的数据包。
注意:捕获过滤器和显示过滤器的配置语法并不相同。
2、Wireshark捕获过滤器之BPF语法
BPF语法是广泛应用与多种数据包嗅探软件,掌握BPF语法对你在数据包层级更深入地探索网络来说非常关键。
使用BPF语法创建的过滤器叫做表达式,每个表达式由一个或者多个原语组成,每个原语包含一个或多个限定词,然后跟着一个ID名字或者数字。
Dst host 192.168.1.1 && tcp port 80
限定词 ID 操作符 限定词 ID
限定词 |
说明 |
列子 |
Type |
指出名字或者数字所代表的意义 |
Host、net、port |
Dir |
指明目标还是源,名字或者数字 |
Src、dst |
Proto |
限定所要匹配的协议 |
Ip、tcp、udp、http、ftp |
3种逻辑运算符,对源语进行组合
- 连接运算符与(&&或and)
- 选择运算符或(||或or)
- 否定运算符非(!或not)
如:src 192.168.1.1 && port 80 捕获源地址为192.168.1.1 80端口的流量
Host 192.168.1.1
Host 2001:db1::6666
Host websever (主机名)
Ether host 0063-aaa1-bbb2
Src host 192.169.1.1
Dst host 192.168.1.1
Dst 192.168.1.1
Port 8080 (只捕获源或者目标8080端口的流量)
! Port 8080 (捕获除了8080以外的流量)
Dst port 80 (只捕获目标端口是80的流量)
Udp portrange 2000-3000 (只捕获源或目标端口是2000-3000的udp数据)
Tcp portrange 5000-6000
3、TCP头部中几种常用的标记位
SYN:用来表示打开连接
FIN:用来表示拆除连接
ACK:用来确认收到的数据
RST:用来表示立刻拆除连接
PSH:用来表示应将数据提交给末端应用程序处理
4、Wireshark显示过滤器
(1)常用显示过滤器表达式
操作符 说明
!tcp.port==3389 排除RDP流量
!arp 排除ARP流量
http 所有HTTP流量
Tcp.port==23 || tcp.port 21 文本管理流量(telnet或ftp)
(2)显示过滤器的逻辑操作符
操作符 说明
And 两个条件需同时满足
Or 其中一个条件被满足
Xor 有且仅有一个条件被满足
Not 没有条件被满足
二、使用Expert info排障
对话(蓝色)
有关通常工作流程的信息,例如带有SYN标志集的TCP数据包。
注意(cyan)
值得注意的事件,例如,应用程序返回了一个常见的错误代码,如HTTP 404。
警告(黄色)
警告,例如,应用程序返回了一个不寻常的错误代码,如连接问题。
错误(红色)
严重的问题,如数据包格式错误。
- Errors:所抓数据识别出的严重错误
- Warnings:所抓数据识别出的一般性问题
- Notes:所抓数据识别出的可能会引发故障的异常现象
- Chats:此标签下的数据包都符合常规流量特征
Errors:所抓数据识别出的严重错误。比如,感知到畸形spoolss或gtp协议数据包,又或者识别到某些数据包的某种字段值跟预期不符(比如,ipv4数据包的ip包头中效验和字段值跟预期值不符合,即Ipv4数据包通不过效验和检查)。
对于一个网络而言,穿梭于其中的数据包只要有百分之一,二具有Errors事件特征的数据包,就会导致事故频发(比如TCP重传),而且也会使网络变得很慢。
Warning:所抓数据识别出来的一般性问题。比如感知了存在TCP零窗口,TCP window full、TCP报文段失序、TCP报文段丢失等现象,又或者识别出了相关网络协议在运作时发出的数据包的内容与正常情况不一致。所谓一般性问题几乎都是应用程序问题或通信问题。
认识Warnings事件:
1、含Reassembly字样的几种子事件:大多是指wireshark抓到了未能重组的数据包。一般而言,这都是wireshark协议解析器问题。
2、在Summary一栏里含window字样的子事件:几乎都是指wireshark感知到了网络中存在TCP zero windown或window full问题,一般而言都是建立tcp连接的端到端设备忙不过来所致。
3、在Summary一栏里含Segmeng字样的子事件:wireshark生成tcp报文段丢失事件信息,是因为末抓全隶属于某股TCP数据流的所有TCP报文段;生成了TCP报文段失序事件信息,是因其感知到了TCP报文未按时发送主机发出的顺序到达接受主机。
这三种子事件都属于TCP故障,一般由网络故障所引发。
总结:wireshark能感知数据包中的种种特征,比如窗口大小字段,TCP报文在传输中是否失序,TCP数据收到之后是否做出确认。但是请注意,wireshark事件只是wireshark自认为比较重要的事件,却不能全信,比如wireshark未能抓取所有的数据包,则必会生成warnings事件,但未必就是网络问题,可能只是抓包时间差问题导致。
Notes:所抓数据识别出的可能会引起故障的异常现象。比如,感知到了TCP重传,重复确认,以及快速重传等现象。虽然上述行为可能会对网络产生严重影响,但属于TCP的正常行为,所有被归纳在Notes,以提醒用户这些数据可能会导致问题的嫌疑。
认识Notes事件:
Wireshark感知到的子类Error事件,主要分为以下三种情况:
1、在Summary一栏里含Retransmissions, Fast Retransmissions、Duplicate ACK字样的子事件:通常预示着网速慢,丢包或者通过TCP传输数据的主机应用程序忙不过来。
2、在Summary一栏里含Keep-Alive字样的子事件:通常预示着TCP或者基于TCP的应用程序问题。
3、在Summary一栏里含Time to live字样的子事件:通常预示着路由问题。
总结:Notes事件的每一种子事件,并非是由固定的某一种类型的故障所导致,以TCP重传现象为列,可能是因为丢包错误,网络状态差(带宽低,延时高)、服务器或客户端停止响应等。Wireshark只是提示存在TCP重传现象,至于如何定位原因找到问题,需根据网络现状及业务综合判断。
Chats:可以统计各种数据包的个数,尤其是TCP的SYN的个数,可以判断是否正在受到SYN flood的攻击。
注意事项
wireshark感知的warnings事件有时无关紧要,但是识别出的Notes事件却偏偏会影响网络性能,所以排除故障时,需要关注内在,切勿只看表面。
三、TCP常见信息
1、对话信息(Chat)
窗口更新(window update):由接收着发送,用来通知发送者TCP接受窗口的大小已经发生更改。
2、注意信息(Note)
TCP重传(retransmission):数据包丢失的结果。发生收到重传的ACK,或者数据包的重传计时器超时的时候。
重复ACK(Duplicate ACK):当一台主机没有收到下一个期望序列号的数据包时,会生成最近一次收到的数据的重复ACK。
保活ACK(ACK to TCP Keep-alive):用来响应数据包
3、警告信息(Warn)
上一段丢失:指明数据包丢失。发生在当数据流中一个期望序列号被跳过时。
乱序:当数据包被乱序接受时,会利用序列号检测。
四、TCP三次握手
1、第一次握手的数据包
客户端发送一个TCP,标志位为SYN,序列号为0,代表客户端请求建立连接。
2、第二次握手的数据包
服务器发回确认包,标志位为SYN,ACK。将确认序号(Acknowledgement Number)设置为1,syn加1,即0+1=1.
3、第三次握手的数据包
客户端再次发送确认包(ACK)SYN标志位为0,ACK标志位为1并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方。
4、TCP头部中几种常用的标记位
SYN:用来表示打开连接
FIN:用来表示拆除连接
ACK:用来确认(通过TCP连接)收到的数据
RST:用来表示立刻拆除连接
PSH:用来表示将数据提交给末端应用程序(进程)处理
六、在liun中使用tcpdump
1、理解关键字
类型的关键字:
a. host(缺省类型):指明一台主机,如host 10.154.0.10
b. net:指明一个网络地址,如net 10.154.0.0
c. port:指明端口号
确定方向的关键字
a.src:ip包源地址
b. dst:目标地址
c. src or dst 源地址或目标地址
d.dst && src 目标地址和源地址
协议的关键字:默认是监听所有协议的信息包
a.ip
b.tcp
c.udp
d.arp
....
逻辑运算
a. 非运算not, !
b.与运算and, &&
c.或运算or, ||
2、使用范例
(1)常用参数
-i:指定tcpdump要监听的网卡
-c:指定要监听的数据包数量
-w:指定监听的数据包保存在哪个文件中
(2)范例
# tcpdump -i eth0 src host 10.154.0.7 //截获10.154.0.7发送的所有数据包
# tcpdump -i eth0 dst host 10.154.0.7 //截获10.154.0.7接受的所有数据包
# tcpdump -i eth0 host 10.154.0.7 and tcp port 80 //截获主机10.154.0.7所有在tcp 80的数据包
# tcpdump -i eth0 host 10.154.0.7 and dst port 80 -w /tmp/wzz.pcap //截获主机10.154.0.7在80端口收到数据包并保存在/tmp目录下wzz.pcap文件中。注:widonws下wireshake中可直接打开。
3、理解抓取的报文
如:10:30:38.806911 IP 10.154.0.8.22 > 10.154.0.7.49454: Flags [P.], seq 26272:26324, ack 53, win 238, options [nop,nop,TS val 1794729390 ecr 4282429292], length 52
第一个字段 10:30:38.806911是该数据报文被抓取的系统本地时间戳。
然后,IP 是网络层协议类型,这里是 IPv4,如果是 IPv6 协议,该字段值是 IP6。
10.154.0.8.22 是源 ip 地址和端口号,紧跟其后的是目的 ip 地址和其端口号,这里是 192.168.64.1.41916。
在源 IP 和目的 IP 之后,可以看到是 TCP 报文标记段 Flags [P.]。该字段通常取值如下:
值标志类型描述
S SYN Connection Start
F FIN Connection Finish
P PUSH Data push
R RST Connection reset
. ACK Acknowledgment
该字段也可以是这些值的组合,例如 [S.] 代表 SYN-ACK 数据包。
接下来是该数据包中数据的序列号。对于抓取的第一个数据包,该字段值是一个绝对数字,后续包使用相对数值,以便更容易查询跟踪。例如此处 seq 26272:26324代表该数据包包含该数据流的第 26272 到 26324 字节。
接下来是 ack 值:ack 53。该数据包是数据发送方,ack 值为 53。在数据接收方,该字段代表数据流上的下一个预期字节数据。
接下来字段是接收窗口大小win 238,它表示接收缓冲区中可用的字节数,后跟 TCP 选项如 MSS(最大段大小)或者窗口比例值。最后, length 52代表数据包有效载荷字节长度。这个长度和 seq 序列号中字节数值长度是不一样的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类