Highlighted
bairichard1
2 Iron

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月14日更新)

1、“既然可以只确认最后一个,那么接收方的确认机制通常有哪几种?(每n个包确认一次?),如果收到1,2,3,4,5,7,8,9,10个包(包6丢了),如何回复确认消息?”

[沛满]:通常有两种,一种是每个包都确认,一种是只确认(连续的)最后一个包。如果不是连续的(中间有包丢失),就确认丢包之前的那一个。以你所举的“如果收到1,2,3,4,5,7,8,9,10个包(包6丢了)”为例,那确认包就是ack 6, 表示12345收到了,在等待6。6没有丢,只是乱序到10后面了,那发送方在收到4个ack 6之后,又会收到ack 11。


2、“ping这个我是知道的,但是有的服务器禁ping。另外,我还发现有ping正常的包,但是实际业务包延迟厉害。我刚测试了一下,ping的时候,包大小很有关系。900以下比较正常,超过1000的包都收不到,900和1000之间的包时好时坏。这个结果有参考意义么?”

ping正常而实际业务包延迟得厉害,正符合我昨天提到的,“一般情况下我们更关注的是应用层的延迟”。比如你发送一个http request给IIS服务器,但是IIS当时很忙,所以就回复得很慢,从客户端看起来就是高延迟。ping包则不一样,收到后基本都是及时回复的,所以更能反映网络上的延迟。

ping的大小在MTU以内应该关系不是非常明显,假如900以下正常,超过1000的全收不到,那得好好查查网络了,比如是不是路上有个设备的MTU比较小。

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

一站式学习Wireshark(八):应用Wireshark过滤条件抓取特定数据流

转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chineseimage001.gif

介绍

应用抓包过滤,选择Capture | Options,扩展窗口查看到Capture Filter栏。双击选定的接口,如下图所示,弹出Edit Interface Settints窗口。

image002.png

下图显示了Edit Interface Settings窗口,这里可以设置抓包过滤条件。如果你确知抓包过滤条件的语法,直接在Capture Filter区域输入。在输入错误时,Wireshark通过红色背景区域表明无法处理过滤条件。最有可能的情况是,过滤条件中含有输入错误,或是使用了display filter的语法。

点击Capture Filter按钮查看并选择已保存的抓包过滤条件。

image003.png

更多信息

抓取指定IP地址的数据流:

如果你的抓包环境下有很多主机正在通讯,可以考虑使用所观察主机的IP地址来进行过滤。以下为IP地址抓包过滤示例:

·         host 10.3.1.1:抓取发到/来自10.3.1.1的数据流

·         host 2406:da00:ff00::6b16:f02d:抓取发到/来自IPv6地址2406:da00:ff00::6b16:f02d的数据流

·         not host 10.3.1.1:抓取除了发到/来自10.3.1.1以外的所有数据流

·         src host 10.3.1.1:抓取来自10.3.1.1的数据流

·         dst host 10.3.1.1:抓取发到10.3.1.1的数据流

·         host 10.3.1.1 or 10.3.1.2:抓取发到/来自10.3.1.1,以及与之通讯的所有数据流,与10.3.1.2,以及与之通讯的所有数据流

·         host www.espn.com:抓取发到/来自所有解析为www.espn.comIP地址的数据流

抓取指定IP地址范围的数据流:

当你需要抓取来自/发到一组地址的数据流,可以采用CIDR(无类别域间路由,Classless Interdomain Routing)格式或使用mask参数。

·         net 10.3.0.0/16:抓取网络10.3.0.0上发到/来自所有主机的数据流(16表示长度)

·         net 10.3.0.0 mask 255.255.0.0:与之前的过滤结果相同

·         ip6 net 2406:da00:ff00::/64:抓取网络2406:da00:ff00:0000(IPv6)上发到/来自所有主机的数据流

·         not dst net 10.3.0.0/16:抓取除了发到以10.3开头的IP地址以外的所有数据流

·         not src net 10.3.0.0/16:抓取除了来自以10.3开头的IP地址以外的所有数据流

·         ip proto <protocol code>:抓取ip协议字段等于<protocol code>值的报文。如TCP(code 6), UDP(code 17), ICMP(code 1)

·         ip[2:2]==<number>ip报文大小

·         ip[8]==<number>TTL(Time to Live)

·         ip[9]==<number>:协议值

·         icmp[icmptype]==<identifier>: 抓取 ICMP代码等于identifierICMP报文, icmp-echo 以及 icmp-request

方括号中第一个数字表示从协议头开始的偏移量,第二个数字表示需要观察多少位。

image004.png

抓取发到广播或多播地址的数据流:

只需侦听广播或多播数据流,就可以掌握网络上主机的许多信息。

·         ip broadcast:抓取广播报文

·         ip multicast:抓取多播报文

·         dst host ff02::1:抓取到IPv6多播地址所有主机的数据流

·         dst host ff02::2:抓取到IPv6多播地址所有路由器的数据流

小贴士:

Wireshark包含了一些默认的抓包过滤条件。点击主工具栏的Edit Capture Filters,跳转到已保存抓包过滤列表。你会发现一些常见抓包过滤的示例。

抓取基于MAC地址的数据流:

当你需要抓取发到/来自某一主机的IPv4IPv6数据流,可创建基于主机MAC地址的抓包过滤条件。

应用MAC地址时,需确保与目标主机处于同一网段。

·         ether host 00:08:15:00:08:15:抓取发到/来自00:08:15:00:08:15的数据流

·         ether src 02:0A:42:23:41:AC抓取来自02:0A:42:23:41:AC的数据流

·         ether dst 02:0A:42:23:41:AC:抓取发到02:0A:42:23:41:AC的数据流

·         not ether host 00:08:15:00:08:15:抓取除了发到/来自00:08:15:00:08:15以外的所有数据流

·         ether broadcastether dst ff:ff:ff:ff:ff:ff:抓取广播报文

·         ether multicast:多播报文

·         抓取指定以太网类型的报文:ether proto 0800

·         抓取指定VLANvlan <vlan number>

·         抓取指定几个VLANvlan <vlan number> and vlan <vlan number>

抓取基于指定应用的数据流:

你可能需要查看基于一个或几个应用的数据流。抓包过滤器语法无法识别应用名,因此需要根据端口号来定义应用。通过目标应用的TCPUDP端口号,将不相关的报文过滤掉。

·         port 53抓取发到/来自端口53UDP/TCP数据流(典型是DNS数据流)

·         not port 53抓取除了发到/来自端口53以外的UDP/TCP数据流

·         port 80:抓取发到/来自端口80UDP/TCP数据流(典型是HTTP数据流)

·         udp port 67:抓取发到/来自端口67UDP数据流(典型是DHCP据流)

·         tcp port 21抓取发到/来自端口21TCP数据流(典型是FTP命令通道)

·         portrange 1-80:抓取发到/来自端口1-80的所有UDP/TCP数据流

·         tcp portrange 1-80:抓取发到/来自端口1-80的所有TCP数据流

抓取结合端口的数据流:

当你需要抓取多个不连续端口号的数据流,将它们通过逻辑符号连接起来,如下图所示:

·         port 20 or port 21抓取发到/来自端口2021UDP/TCP数据流(典型是FTP数据和命令端口)

·         host 10.3.1.1 and port 80:抓取发到/来自10.3.1.1端口80的数据流

·         host 10.3.1.1 and not port 80:抓取发到/来自10.3.1.1除了端口80以外的数据流

·         udp src port 68 and udp dst port 67:抓取从端口68到端口67的所有UDP数据流(典型是从DHCP客户端到DHCP服务器)

·         udp src port 67 and udp dst port 68:抓取从端口67到端口68的所有UDP数据流(典型是从DHCP服务器到DHCP客户端)

·         抓取TCP连接的开始(SYN)和结束(FIN)报文,配置tcp[tcpflags] & (tcp-syn|tcp-fin)!=0

·         抓取所有RST(Reset)标志位为1TCP报文,配置tcp[tcpflags] & (tcp-rst)!=0

·         less <length>:抓取小于等于某一长度的报文,等同于len <=<length>

·         greater <length>:抓取大于等于某一长度的报文,等同于len >=<length>

SYN: 简历连接的信号

FIN: 关闭连接的信号

ACK: 确认接收数据的信号

RST: 立即关闭连接的信号

PSH: 推信号,尽快将数据转由应用处理

·         tcp[13] & 0x00 = 0: No flags set (null scan)

·         tcp[13] & 0x01 = 1: FIN set and ACK not set

·         tcp[13] & 0x03 = 3: SYN set and FIN set

·         tcp[13] & 0x05 = 5: RST set and FIN set

·         tcp[13] & 0x06 = 6: SYN set and RST set

·         tcp[13] & 0x08 = 8: PSH set and ACK not set

tcp[13]是从协议头开始的偏移量,0,1,3,5,6,8是标识位。

image005.png

尽量避免使用抓包过滤。即便多看几个报文,也比漏看一个报文要好。当你抓取了大量报文的时候,用显示过滤(过滤选项也更多)来重点查看某一数据流。

小贴士:

如果你需要查看TCP帧中的某一ASCII字符串,用Wireshark String-Matching Capture Filter Generator(http://www.wireshark.org/tools/string-cf.html)。例如,想要抓取HTTP GET报文,输入GET并将TCP偏移量设置为0

             

0 项奖励

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

赞!

0 项奖励
happydanye
1 Copper

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

To 沛满:非常感谢,受益良多。

我们这个网络涉及电信和移动的互联互通,我们怀疑是电信动了手脚(有先例,不过那次是整个断了,这次电信升级了手段?)

0 项奖励
wcd1
1 Nickel

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

楼主再弄个FC版的贝

0 项奖励

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

FC版?

0 项奖励

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

这个帖子预计再写两篇就收尾了,一篇display filter,一篇TCP数据流观察。对于提问,建议,解答的每一位表示感谢!大家有问题随时可以继续讨论。

0 项奖励
wcd1
1 Nickel

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

恩,弄个SCSI 协议的数据包解析

0 项奖励
Yanhong1
3 Cadmium

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

22000的page view了,lz厉害的

0 项奖励

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(7月22日更新)

如果是诊断网络存储的性能问题,有一系列从交换机到存储前端到cache到后端到磁盘的诊断工具和日志,检查内容从存储响应时间带宽到交换机日志不一而足,wireshark也是其中一个环节。以后可以写些这方面内容

0 项奖励