未解决
此帖子已超过 5 年
2 Intern
•
1.2K 消息
23
313561
如果看了这个你还是不会用Wireshark,那就来找我吧(8月6日完结)
一站式学习Wireshark(一):Wireshark基本用法
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese
介绍
应用Wireshark显示过滤器分析特定数据流(下) NEW
应用Wireshark诊断网络性能 - TCP重传与重复ACK
应用Wireshark诊断网络性能 - TCP窗口与拥塞处理
更多信息
按照国际惯例,从最基本的说起。
抓取报文:
下载和安装好Wireshark之后,启动Wireshark并且在接口列表中选择接口名,然后开始在此接口上抓包。例如,如果想要在无线网络上抓取流量,点击无线接口。点击Capture Options可以配置高级属性,但现在无此必要。
点击接口名称之后,就可以看到实时接收的报文。Wireshark会捕捉系统发送和接收的每一个报文。如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。
上端面板每一行对应一个网络报文,默认显示报文接收时间(相对开始抓取的时间点),源和目标IP地址,使用协议和报文相关信息。点击某一行可以在下面两个窗口看到更多信息。“+”图标显示报文里面每一层的详细信息。底端窗口同时以十六进制和ASCII码的方式列出报文内容。
需要停止抓取报文的时候,点击左上角的停止按键。
色彩标识:
进行到这里已经看到报文以绿色,蓝色,黑色显示出来。Wireshark通过颜色让各种流量的报文一目了然。比如默认绿色是TCP报文,深蓝色是DNS,浅蓝是UDP,黑色标识出有问题的TCP报文——比如乱序报文。
报文样本:
比如说你在家安装了Wireshark,但家用LAN环境下没有感兴趣的报文可供观察,那么可以去Wireshark wiki下载报文样本文件。
打开一个抓取文件相当简单,在主界面上点击Open并浏览文件即可。也可以在Wireshark里保存自己的抓包文件并稍后打开。
过滤报文:
如果正在尝试分析问题,比如打电话的时候某一程序发送的报文,可以关闭所有其他使用网络的应用来减少流量。但还是可能有大批报文需要筛选,这时要用到Wireshark过滤器。
最基本的方式就是在窗口顶端过滤栏输入并点击Apply(或按下回车)。例如,输入“dns”就会只看到DNS报文。输入的时候,Wireshark会帮助自动完成过滤条件。
也可以点击Analyze菜单并选择Display Filters来创建新的过滤条件。
另一件很有趣的事情是你可以右键报文并选择Follow TCP Stream。
你会看到在服务器和目标端之间的全部会话。
关闭窗口之后,你会发现过滤条件自动被引用了——Wireshark显示构成会话的报文。
检查报文:
选中一个报文之后,就可以深入挖掘它的内容了。
也可以在这里创建过滤条件——只需右键细节并使用Apply as Filter子菜单,就可以根据此细节创建过滤条件。
Wireshark是一个非常之强大的工具,第一节只介绍它的最基本用法。网络专家用它来debug网络协议实现细节,检查安全问题,网络协议内部构件等等。
Zhang_Jiawen
2 Intern
2 Intern
•
1.2K 消息
0
2014年7月22日 19:00
这个帖子预计再写两篇就收尾了,一篇display filter,一篇TCP数据流观察。对于提问,建议,解答的每一位表示感谢!大家有问题随时可以继续讨论。
Yanhong1
1.6K 消息
0
2014年7月22日 22:00
22000的page view了,lz厉害的
WCD
43 消息
0
2014年7月22日 22:00
恩,弄个SCSI 协议的数据包解析
Zhang_Jiawen
2 Intern
2 Intern
•
1.2K 消息
0
2014年7月22日 23:00
如果是诊断网络存储的性能问题,有一系列从交换机到存储前端到cache到后端到磁盘的诊断工具和日志,检查内容从存储响应时间带宽到交换机日志不一而足,wireshark也是其中一个环节。以后可以写些这方面内容
Zhang_Jiawen
2 Intern
2 Intern
•
1.2K 消息
1
2014年7月27日 18:00
一站式学习Wireshark(九):应用Wireshark显示过滤器分析特定数据流(上)
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese
介绍
掌握显示过滤器对于网络分析者来说是一项必备的技能。这是一项大海捞针的技巧。学会构建,编辑,保存关键的显示过滤器能够节省数小时的时间。
与捕捉过滤器使用的BPF语法不同,显示过滤器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark显示过滤器和捕捉过滤器有很大的区别。
更多信息
最简单的过滤器语法:
最简单的显示过滤器可基于协议,应用,域名,或字符,对大小写敏感。绝大多数简单的显示过滤器由小写字母组成。
协议过滤器:
· arp:显示所有包括ARP请求和回复在内的所有ARP数据流。
· ip:显示内含IPv4头在内的(如ICMP目的地址不可达报文,在ICMP报文头之后返回到来方向的IPv4头)IP数据流。
· ipv6:显示所有IPv6数据流,包括内含IPv6报文头的IPv4报文,如6to4,Teredo,以及ISATAP数据流。
· tcp:显示所有基于TCP的数据流。
应用过滤器:
· bootp:显示所有DHCP数据流(基于BOOTP)。
· dns:显示包括TCP区域传输以及基于标准UDP的DNS请求和回复在内的所有DNS数据流。
· tftp:显示所有TFTP(Trivial File Transfer Protocol)数据流。
· http:显示所有HTTP命令,回复以及数据传输报文,但不显示TCP握手报文,TCP ACK报文以及TCP结束报文。
· icmp:显示所有ICMP报文。
域过滤器:
· boot.option.hostname:显示所有包含主机名的DHCP数据流(DHCP基于BOOTP)。
· http:host:显示所有包含HTTP主机名字段的所有HTTP报文。此报文是客户端向网络服务器发送请求时发出的。
· ftp.request.command:显示所有包含命令的FTP数据流,比如USER,PASS,或RETR命令。
字符过滤器:
· tcp.analysis.flags:显示所有包含TCP分析标识的所有报文,包括报文丢失,重传,或零窗口标识。
· tcp.analysis,zero_window:显示含有表明发送方的接收缓存用完标识的报文。
了解字段名:
很多显示过滤器都是基于字段名(例如http.host)。要了解字段名,在Packet list面板选中字段查看Status条,如下图所示。
本例中,我们在Packet Display面板中选中第10帧,然后在Packet Details面板中展开HTTP报文头。之后在报文的HTTP段点击Request Method行,状态条表明这一字段称为http.request.method。
我们在显示过滤器区域输入http.request.method以显示所有包含这一字段的报文。如下图所示,注意到Status条表明此抓包文件包含2011个报文只有101个报文符合过滤条件。
这是一个很好用的过滤器,以确定HTTP客户端请求了哪些内容。网络服务器不发送HTTP request method,它们发送HTTP响应代码。
使用自动完成功能:
当你在过滤器区域输入http.request.method的时候,Wireshark打开一个窗口让你遍历过滤器选项。当你输入http.(包括点号),你会看到所有可能的以此为开头的显示过滤条件列表。继续输入http.request. ,会看到以这一短语为开头的过滤条件,如下图所示:
可以使用这一自动完成功能查看所有可用的过滤条件。例如,输入tcp. ,Wireshark会列出所有可用的TCP过滤条件。如果输入tcp.analysis. ,Wireshark会列出所有处理TCP问题与性能的TCP analysis过滤条件,如下图:
显示过滤器比较运算符:
通过扩展过滤条件可查找某一域值,Wireshark针对此功能支持数字比较运算符。
1. ==或eq
例如:ip.src == 10.2.2.2
显示所有源地址为10.2.2.2的IPv4数据流
2. !=或ne
例如:tcp.srcport != 80
显示源端口除了80以外的所有TCP数据流
3. >或gt
例如:frame.time_relative > 1
显示距前一个报文到达时间相差1秒的报文
4. <或lt
例如:tcp.window_size < 1460
显示当TCP接收窗口小于1460字节时的报文
5. >=或ge
例如:dns.count.answers >= 10
显示包含10个以上answer的DNS响应报文
6. <=或le
例如:ip.ttl <= 10
显示IP报文中Time to Live字段小于等于10的报文
7. contains
例如:http contains “GET”
显示所有HTTP客户端发送给HTTP服务器的GET请求
对于基于TCP应用的过滤条件采用比较运算符。例如,如果想看端口80上面的HTTP数据流,使用HTTP.port==80。
小贴士:
运算符两边不用留空格。ip.src == 10.2.2.2与ip.src==10.2.2.2的效果是相同的。
使用Expressions:
当你实在不知道该过滤些什么的时候,使用显示过滤器工具栏的Expression按钮。在Filter Expression窗口,输入感兴趣的应用或协议名,跳转到Field Name列表中相应条目。Relation选项用来添加一个比较运算符,窗口右端是预先定义的值。点击Apply按钮完成。
编辑和使用默认过滤器:
Wireshark提供15个缺省显示过滤器供创建新的显示过滤器时参考。点击Filter按钮或点击Display Filter按钮打开显示过滤器窗口,如下图所示:
下图显示了缺省过滤器列表,选中之后点击OK。
小心使用缺省过滤器。以太网和IP主机过滤器可能与实际网络不符。使用之前必须编辑或作为创建参考。
小贴士:
显示过滤器保存在一个名为dfilters的文件中,可以使用任何文本编辑器来进行编辑。要找到你的dfilters文件,首先在Status条的右端查找当前profile名。如果这一区域表明你在默认profile,选择Help\About Wireshark\Folders并双击Personal Configuration文件夹链接,dfilters文件就在这个目录里。
Zhang_Jiawen
2 Intern
2 Intern
•
1.2K 消息
0
2014年8月5日 19:00
一站式学习Wireshark(十):应用Wireshark显示过滤器分析特定数据流(下)
转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese
介绍
掌握显示过滤器对于网络分析者来说是一项必备的技能。这是一项大海捞针的技巧。学会构建,编辑,保存关键的显示过滤器能够节省数小时的时间。
与捕捉过滤器使用的BPF语法不同,显示过滤器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark显示过滤器和捕捉过滤器有很大的区别。
更多信息
过滤HTTP数据流:
在排查网页浏览器会话或检查网速过慢问题时,对浏览器会话进行过滤就显得尤为重要。过滤HTTP数据流有两种方式:
http
tcp.port==xx(xx表示所使用的HTTP端口)
第二种过滤方法更加有效。让我们通过分别对网页浏览会话应用两个过滤条件来比较一下:
基于TCP端口号的应用过滤:
本例中的抓包文件包含与网站www.wireshark.org的链接以及请求下载Wireshark的请求。我们使用tcp.port==80的显示过滤器并且发现,确实,所有报文都符合条件,如下图所示。很好这就是我们想要的结果。
我们仔细看报文20的Protocol列,Wireshark并没有在报文中看到任何HTTP命令或回复,因此HTTP协议分析器没有被应用于此报文。它只是一个TCP报文(TCP ACK, FIN, RST,以及三路TCP握手信号都列成TCP)。
如果你想要查看TCP连接建立,维护以及关闭报文,就应该使用上述过滤条件(并且你会一直看到这些TCP报文)。
谨慎使用基于TCP的应用名过滤:
现在来看一下对数据流应用http过滤条件的情况。下图中,你会看到Wireshark显示了13,353个报文。这些是Protocol列中包含HTTP的报文。
这是整个网站浏览会话的一部分,使用HTTP过滤条件我们无法检测出TCP错误,对于应用永远是使用端口号过滤器优于TCP。
小贴士:
不幸的是,Wireshark对于HTTP数据流的缺省过滤是http。可以考虑将缺省对HTTP数据流的过滤改为基于端口号。
按照某一IP地址或主机过滤报文:
对于IPv4数据流,我们使用字段名ip.src,ip.dst,ip.addr;对于IPv6数据流,使用ipv6.src,ipv6.dst,ipv6.host以及ipv6.addr。注意当你在Packet Details面板中点击IP地址时,将会看到它们被称为:ip.src,ip.dst, ipv6.src或ipv6.dst。字段名ip.host和ipv6.host,ip.addr以及ipv6.addr不在报文里。
ip.host和ipv6.host过滤条件在IPv4/IPv6源和目的地址字段查找解析为指定主机名的IPv4或IPv6地址。ip.addr==[address]和ipv6.addr==[address]过滤条件在IPv4/IPv6源和目的地址字段查找指定IPv4/IPv6地址。
· 例如:ip.addr==10.3.1.1
显示在IP源地址字段或IP目的地址字段包含10.3.1.1的帧。
· 例如:!ip.addr==10.3.1.1
显示除了在IP源地址字段或IP目的地址字段包含10.3.1.1以外的帧。
· 例如:ipv6.addr==2406:da00:ff00::6b16:f02d
显示以2406:da00:ff00::6b16:f02d为源地址或目的地址的帧。
· 例如:ip.src==10.3.1.1
显示所有来自10.3.1.1的数据流。
· 例如:ip.dst==10.3.1.1
显示所有发往10.3.1.1的数据流
· 例如:ip.host==www.wireshark.org
显示所有解析为www.wireshark.org的IP地址。
按照某一IP地址范围过滤报文:
可以使用>或<比较运算符或逻辑运算符&&查找某一地址范围内的报文。
· 例如:ip.addr>10.3.0.1&&ip.addr<10.3.0.5
显示来自或发往10.3.0.2,10.3.0.3,10.3.0.4的数据流。
· 例如:(ip.addr>=10.3.0.1&&ip.addr<=10.3.0.6)&&!ip.addr==10.3.0.3
显示来自或发往10.3.0.1,10.3.0.2,10.3.0.4,10.3.0.5,10.3.0.6的数据流,10.3.0.3排除在外。
· ipv6.addr>=fe80::&&ipv6.addr
显示IPv6地址从0xfe80到0xfec0开头的数据流。
按照某一IP子网过滤报文:
可以通过ip.addr字段名定义一个子网。这种格式使用IP地址后跟斜杠以及一个后缀,表明IP地址中定义的网络部分的比特数。
· 例如:ip.addr==10.3.0.0/16
显示在IP源地址或目的地址字段以10.3开头的数据流。
· 例如:ip.addr==10.3.0.0/16 && !ip.addr==10.3.1.1
显示除了10.3.1.1以外,在IP源地址或目的地址字段以10.3开头的数据流。
· 例如:!ip.addr==10.3.0.0/16 && !ip.addr==10.2.0.0/16
显示所有数据流,除了在IP源地址或目的地址字段以10.3和10.2开头的数据流.
使用右键|作为过滤条件:
如下图所示:在某一帧的Packet Details面板,扩展HTTP部分,右键Request URI一行,选择Apply as Filter | Selected。
Wireshark会创建合适的显示过滤条件(http.request.rui==”/”)并应用于抓包文件。之后过滤得到2个报文,显示用户从两个不同的IP地址访问主页内容,如下图所示。
如果你想排除这类HTTP请求,只要在过滤条件前加!或not。你可以通过右键GET请求并选择Apply as Filter | Not Selected。
not http.request.uri==”/”
如果你感兴趣的是其余HTTP GET请求,可对上述过滤条件扩展:定位在一个HTTP GET请求报文,扩展HTTP部分,右键GET并选择Apply as Filter,这一次选择and Selected选项。之后,显示过滤器显示如下:
(not http.request.uri==”/”)&&(http.request.method==“GET”)。
现在可以看到除了default page request(/)之外的所有HTTP GET请求。
过滤单个TCP或UDP会话:
当你想要观察客户端应用于服务器进程之间的通讯,你需要查找的是一个“会话“。会话是基于客户端应用和服务器进程的IP地址和端口号。通常抓包文件中会包含数百个会话,了解如何快速定位及过滤无疑是很有帮助的。
以下两种常用方式可从抓包文件中提取单一TCP或UDP会话:
· 通过在Packet List面板右键一个TCP或UDP报文并选择Conversation Filter | [TCP|UDP].
· 通过在Packet List面板右键一个TCP或UDP报文并选择Follow [TCP|UDP] Stream。
右键选择Conversation Filter:
通过在Packet List面板右键一个TCP或UDP报文并选择Conversation Filter | TCP,如下图所示:
Wireshark对数据流创建并应用以下过滤条件:
(ip.addr eq 24.6.173.220 and ip.addr eq 184.84.222.48) and (tcp.port eq 19953 and tcp.port eq 80)。
同样的方法可应用于基于IP地址,以太网地址,UDP地址/端口号结合的会话。
右键选择Follow a Stream:
要查看应用命令以及会话中的交换数据,通过在Packet List面板右键一个TCP或UDP报文并选择Follow [TCP|UDP] Stream,如下图所示。如果选择Follow UDP Stream,显示过滤条件会基于IP地址和端口号。如果选择Follow TCP Stream, 显示过滤条件会基于TCP Stream Index number。
错误的用法导致不work:
错误:ip.addr != 10.2.2.2
显示在IP源地址或IP目的地址不包含10.2.2.2的报文。只要在源或目的IP地址不为10.2.2.2,报文就会被显示出来。这时隐含的或会导致实际上并未过滤任何报文。
正确:!ip.addr == 10.2.2.2
显示IP源地址和IP目的地址都不包含10.2.2.2的报文。
错误:!tcp.flags.syn==1
显示所有不含TCP SYN bit设置为1的报文。其他协议报文,必须UDP和ARP报文也符合这一过滤条件,因为它们的TCP SYN bit没有设置为1。
正确:tcp.flags.syn!=1
只显示包含SYN设置为0的TCP报文。
小贴士:
当你知道只有一个字段符合你的过滤字段名的时候,不要害怕使用!=运算符。有时,这是最好用的过滤运算符。
Zhang_Jiawen
2 Intern
2 Intern
•
1.2K 消息
0
2014年8月5日 19:00
完结了。后面如果看到有合适的内容我再补充上来。
据说,Wireshark培训需要花费一两千美元,所以这个帖子算是个福利贴吧~
我想即便看完这个帖子,肯定还是有相当的问题无法找到答案,如果大家有任何问题都可以在帖子里留言。
谢谢大家。
Zhang_Jiawen
2 Intern
2 Intern
•
1.2K 消息
0
2014年8月6日 01:00
在这个帖子里打个广告好了:下周开始写一个网络基本功系列,讲解网络技术的几个重要知识点和排错方法,想到的几个topic有协议封装过程,IP地址IP子网,路由,交换机网络:VLAN,链路聚合,排错的讲些基本命令和工具,这些。欢迎收看
Yanhong1
1.6K 消息
0
2014年8月6日 01:00
支持一下
Roger_Wu
2 Intern
2 Intern
•
4K 消息
0
2014年8月6日 18:00
可以集结成册出书了
Jeffey1
2 Intern
2 Intern
•
2.8K 消息
0
2014年8月6日 19:00
还是精装中文版啊!Mark一下,以后慢慢细细品尝。
yot1
9 消息
0
2014年8月10日 05:00
获益良多...
由于遇到问题,所以也尝试了抓包分析。
想请教一下:
问题其实和前面happydanye的有点像,在网络不好的情况,小数据传输ok,当数据多,而且频率稍快的时候就会丢包。
常试在服务端和客户端抓包,当客户端丢包时,服务端会收到重复的ack,这时服务端快速重传,然后奇怪的是,客户端
还是收不到这丢失的包,一直给客户端发送相同的ack,服务端也一直在重传,后续的数据就被堵塞了。通过报文来看,
客户端的窗口大小是足够大的,一直都是维持在刚开始的数字,这样是否可说明不是客户端的缓冲区满或溢出的问题?
这还有可能是什么情况呢?
在内网或网速快之类的情况下倒是不会发生...
yot1
9 消息
0
2014年8月10日 15:00
bairichard1
107 消息
0
2014年8月10日 15:00
不介意的话,可以把包传到网上,我帮你分析一下。
Jason_Zhou
1.2K 消息
0
2014年8月10日 18:00
Hi Yot, 我看你上面那个最新的回复是空白的,没任何内容。如果是想上传附件的话,请参考这个帖子里第13个Q&A的方法用高级编辑器即可 https://community.emc.com/thread/171422