wireshark入门 & Wireshark网络问题案例分析


wireshark入门

抓包过滤器
BPF语法(Berkeley Packet Filter),基于libpcap/wincap库
语句间语法:<Expressions><Logical operations><Expressions>
<Expressions>语句内部语法:<Protocol name><Direction><Host(s)><Value>

1.protocol可选值:ether,fddi,ip,arp,rarp,decnet,lat,tcp,dns等等协议
2.direction可选值:src,dst,src and dst,src or dst,默认为src or dst
3.host(s)可选值:net,port,host,portrange。默认为host,如 src 192.168.0.100 等价于src host 192.168.0.100
4.logical可选值:and,or,not(其中not鱼油最高优先级,and和or优先级相同),运算顺序:从左至右

示例:
1.tcp src port 443
2.not arp
3.port 80
4.src 192.168.0.100 and port 233
抓包过滤器
显示过滤器
显示过滤器的规则和抓包过滤器的规则略有不同!

语句间语法:<Expressions><Logical operations><Expressions>
<Expressions>语句内部语法:<Protocol>.<string1>.<string2><comparison operator><value>

比较操作符:==   !=   >   <   >=   <=
逻辑操作符:and/or/xor(有且仅有一个条件被满足)/not
IP地址:ip.addr/ip.src/ip.dst
端口过滤:tcp.port/tcp.srcport/tcp.dstport/tcp.flag.syn/tcp.flag.ack
协议:arp/ip/icmp/udp/tcp/bootp/dns


示例:
1.tcp.port==80
2.!arp
3.ip.addr==192.168.1.111
4.(ip.dst==192.168.1.111)&& !(ip.dst==192.168.1.200)


提示:
1.在展示过滤器手动输入过滤规则时,会自动弹出一些过滤条件
2.右键菜单-设置过滤规则时,可以右击的对象包括源IP,目的IP,协议,也可以在数据包解析区右击数据。
3.在展示过滤器判断的Expression按键,可以使用像选择题一样,配置出过滤规则
显示过滤器
wireshark显示界面设置:
数据包列表展示区
字体大小调节---------------3个放大镜按钮

列设置----------------进入有2个方法,1.edit-prefernces-columns。2.右击列-columns-prefernces
    所有的可以设置为过滤规则的,也可以设置为列名
增加列----------------2个方法:1.在数据包解析区找到你要增加的列的信息,右击-apply as columns。
    2.edit-prefernces-columns,在列编辑页面编辑
修改列:右击列名-edit columns detail,即进入修改。或者可以进入列编辑页面进行修改
隐藏列:右击列名-hide columns。或者可以进入列编辑页面进行修改
删除列:右击列名-remove columns。或者可以进入列编辑页面进行修改


时间设置:
view - time display format :修改时间显示格式
右击数据包 - set time reference(toggle) :设置相对的参考时间

名字解析:
edit - preferences - name resolution。或者在抓包设置中也可以设置



在协议分层统计时,arp包一般占比在百分之零点几,若占比到10+,则有可能有人在搞arp攻击

长度40-79的数据包一般是arp包、tcp建立连接时的包,dns包等等。可以对数据包展示区对length进行排序查看
长度1280-2559的数据包一般是tcp数据包


在数据分析时,wireshark支持右击,对数据包进行注释

protocol是自动识别的,但是也可以强制指定。比如NDS协议数据包,默认当然是用DNS来解析的了,强制使用其他协议时,那么所有的DNS协议包全部使用其他协议进行解析。

TLSv1.2即https
https=http+ssl(ssl,后来改名为tls)

详细的可见微软note笔记

参考:常涛wireshark+陈鑫杰wireshark

Wireshark进阶之网络问题案例分析

Wireshark的信息统计(Statistics)

每次查看大量数据包流量时,建议从Wireshark的信息统计部分开始进行总的查看,往往能够了解到大体的一些信息,对后续具体的流量分析作用很大。

查看端点(Endpoints),往往可以观察到该数据包中哪些地址的流量较多等信息,可以判断出哪些地址比较可疑等信息
查看会话(Conversations),会话跟端点的区别在于会区别显示哪两个IP在通信,且各自都发送多大的数据等
协议分层(Protocol Hierarchy Statistics),从该窗口中可看出是哪些协议的流量比较多
每次进行流量检查的时候最好先打开这个窗口,方便进行总的流量查看,若不常用的协议流量较多时则可能存在一些异常行为。


数据包长度(Packet Lengths),可以查看数据包的大小所占百分比,如果存在着很多的较大的数据包,则很可能是在传输数据
查看IO图(IO Graphs),显示下载量和下载速度,如下分别为下载慢的和快的

双向时间图(TCP Stream Graph>Round Trip Time Graph),确定是否存在延迟,延迟点的查看即查看峰值较高的点(这个图没找到在哪)

专家信息(Analyze>Expert Info Composite),在Analysis中
四类状态:对话chat(关于通信的基本信息)、注意note(正常通信中的异常数据包)、警告warn(不是正常通信中的异常数据包)、错误error(数据包中的错误,或者解析器解析时错误)。



一些常见的协议包
IPv4头存活时间TTL:TTL值规定了数据包在丢弃之前所能经历的时间或者能够经过的最大的路由数目。
TCP三次握手  SYN----SYN,ACK---ACK
TCP终止FIN   FIN,ACK---ACK;FIN,ACK---ACK(一端发起终止TCP,另一端收到FIN包后,先回复一个ACK包,再发起一个终止包(FIN,ACK))
TCP重置RST   SYN---RST,ACK
ICMP ping    Echo(ping)request---Echo(ping)reply(Type为8、Code为0意味着这是一个echo请求,Type为0、Code为0意味着这是一个echo响应)
DNS查询(资源记录类型A-IPv4主机地址,NS-权威域名服务器,CNAME-规范别名,MX-邮件交换,TXT-文本字符串,AAAA-IPv6主机地址,IXFR-增量区域传送,AXFR-完整区域传送)

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

在三次握手的服务器端的回复包中,ack为seq的值+1
wireshark图表及常见协议说明
1、Wireshark嗅探分别ncat和nc流量来进行无加密和加密传输的对比
nc是明文的,而ncat是加密的。


2.TCP的错误恢复和流量控制机制以及识别、诊断网络慢的问题
1)TCP重传
重传数据包是TCP最基本的错误恢复特性之一。当数据包发送出去但是接收方并没有发送ACK时,发送方会认为原来的数据包已经丢失然后再重传,期间RTO(重传超时)的值会翻倍。整个过程会持续收到接收方发送的ACK或者是发送方重传次数达到最大值为止。
TCP重传包---TCP Retransmission

2)TCP重复确认和快速重传
当接收方收到乱序的数据包时,便发送重复的ACK,且TCP在其头部使用序号和确认号字段来确保数据被可靠接受并以发送顺序重组。
(关键)接收数据的序号+接收数据的字节数=发出的确认号;即回复包的ack值=接收包中的seq值+接收包中的数据长度len值;ack = seq+len

当接收方接收到与计算不一样的序号的时候会假设有数据包丢失了,从而会向发送方发送一个包含丢失的数据包序号的ACK数据包让发送方重传数据包。而当发送方收到3个来自接收方的重复ACK时会立刻发送一个快速重传。重传其间其他所有的正在传输的都停止下来等重传数据包完成传输才能继续传输。



即本端的回复ack中,ack的值=服务器端发来的数据包的seq值+该数据包中的数据长度len
服务器端发送的数据包中的seq值(非该TCP会话的第一个数据包)=本端回复的ack值
本场景为到服务器端下载文件,当TCP三次握手建立成功后:
第一个数据包为:本端先发送了一个PSH,ACK包,该数据包中含有少量数据(其实就是http get请求),即seq=1(wireshark设置的相对序列号),len有值(大小100+);所以服务器端回复的ACK包中ack值=接收包中的seq+len
然后服务器端开始不断地传回数据,此时可以看到本端只回复ACK确认包,而不会再发送数据。
所以可以发现,本端的所有ACK确认包中,seq值不变,ack值=接收包中的seq+len
而服务器端的所有发来的数据包(wireshark上显示也是为ACK包)中,ack值不会,seq值=上一个本端回复的ack包的ack值。

更简练的总结:最初是的seq为1,ack值=该次tcp会话中接收到的所有数据的len值+1
所以就很简单了:服务器端只有在接收本端的一个PSH,ACK包中有数据,所以服务器端接下来所有的包ack值都不变。seq值等于回复的ack值,而数据发送要连续,所以seq在不断变化
本端接下来只接收数据,而不发送数据,所以seq值不变,而ack值不断变化
服务器端:ack值不变,seq值不断变化()
本端:seq值不变,而ack值不断变化()


3)TCP滑动窗口机制
TCP滑动窗口机制用于检测何时发生了数据包丢失并调整数据传输速率加以避免。

窗口大小:服务器会计算客户端在此前发送数据包的速率并计算按如此速率下去接受是否会发生数据包丢失,若可能会发生丢失时,服务器会根据能够接受的速率进行调整返回的ACK数据包的TCP头部窗口大小值来实现数据的正常接受。另外,窗口大小值递减,是主机延迟增加的一个典型指标。

零窗口:有时候服务器会没办法处理客户端发送过来的数据,这是服务器会发送一个数据包指明窗口大小是零,让客户端停止所有的数据传输。但客户端依然会通过发送“保活数据包”来保持和服务器的连接以便确认服务器接受窗口的状态。




4)网络高延迟
正常通信
整个通信过程是相当迅速的,即每个数据包发送的时间不会隔很久:即数据包间隔在0.1秒以内(基本在0.01-0.05之间)

线路延迟
在示例中看到在三次握手时,SYN和SYN,ACK包的间隔较长(1秒左右);因为这种三次握手的数据包都是无数据的,即使设备再忙,也可以快速响应,排除了设备的可能,所以可能为线路延迟。(原话:因为当服务器收到一个SYN数据包时,它不涉及任何传输层以上的处理,是只需要很小的处理量就能够进行发送一个响应的,即使是在承受巨大的流量负载的时候也一样能迅速响应,从而排除了服务器的可能性。)

HTTP的GET请求从客户端正常发送给服务器之后的,而同样,服务器在发送数据之前先发送一个ACK是不会耗费很多处理资源的,因而这也是线路延迟的一个标志。
(可以参考我个人总结的ack = seq+len)

通过上面的2个示例得出结论:无数据的ack包不涉及任何传输层以上的处理,是只需要很小的处理量就能够进行发送一个响应,即使是在承受巨大的流量负载的时候也一样能迅速响应,所以当这种ack包明显延迟时,可以得出是线路延迟的结论。
线路延迟说明了问题并不是出在客户端或者服务器中,而是线路中的某些设备中,可能是防火墙、代理服务器之类的问题等等。

客户端延迟
如果在tcp三次握手建立后,看到http get请求包有明显延迟,则可以判断是客户端问题。(此时在客户端抓的包)

服务器延迟
当前面的都没问题,http get请求包也顺利发送到了服务器,这时服务器该开始回传数据了,此时若看到服务器的数据包明显延迟过高,则说明是服务器的问题。

小总结(抓包环境为客户端):
因为ack包无数据,若延迟过高,则判断为线路问题。
http get请求包延迟高,则判断为客户端问题。
http get相应包延迟高,则判断为服务器端问题。


3.抓包分析NMAP工具进行SYN扫描
TCP SYN扫描是依赖于三次握手来确定目标主机上哪些端口是开放的。攻击者会发送TCP SYN数据包到目标主机的一个范围的端口上,假装是要进行建立正常的通信连接,这也是TCP三次握手的第一次。若目标机器回复了TCP SYN/ACK数据包,则表明该端口是打开的,且这时候攻击者是不进行任何回复的,这样导致目标主机会进行3次重传SYN/ACK;若攻击者收到相应的RST数据包,表明端口已经关闭了;若攻击者没有收到任何响应,则意味着端口被某个中间设备过滤了,可能是防火墙或者主机本身。

可以通过“统计”>“会话”中的数据来快速识别哪些端口是开放的或者是关闭的:
其中点击Conversations窗口内的TCP:1994,让packets按从大到小的顺序排序,其中5个包(SYN、SYN/ACK、三次重传SYN/ACK)的端口就是开放的,2个包(SYN、RST)的端口就是关闭的,剩下的都是一个包(SYN)的都是不确定的。



4.被动式操作系统指纹术
“操作系统指纹术”是指在无物理接触的情况下,来确定目标主机运行的操作系统的一组技术,分为主动式和被动式。

主动式主要为使用Nmap发起主动的扫描,然后再与指纹数据库进行对比后确认。而被动式则主要是根据不同操作系统实现的TCP/IP协议栈都必须为这些域定义它自己的默认值来实现识别的原理。
实战案例(含tcp三次握手及网络故障解析)

参考:

Wireshark进阶之网络问题案例分析
https://blog.csdn.net/SKI_12/article/details/78333085

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM