Zhang_Jiawen
4 Beryllium

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 项奖励
Zhang_Jiawen
4 Beryllium

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

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

0 项奖励
Yanhong1
4 Beryllium

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

22000的page view了,lz厉害的

0 项奖励
Zhang_Jiawen
4 Beryllium

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

一站式学习Wireshark(九):应用Wireshark显示过滤器分析特定数据流(上)

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

介绍

掌握显示过滤器对于网络分析者来说是一项必备的技能。这是一项大海捞针的技巧。学会构建,编辑,保存关键的显示过滤器能够节省数小时的时间。

与捕捉过滤器使用的BPF语法不同,显示过滤器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark显示过滤器和捕捉过滤器有很大的区别。

更多信息

最简单的过滤器语法:

最简单的显示过滤器可基于协议,应用,域名,或字符,对大小写敏感。绝大多数简单的显示过滤器由小写字母组成。

协议过滤器:

·         arp:显示所有包括ARP请求和回复在内的所有ARP数据流。

·         ip:显示内含IPv4头在内的(如ICMP目的地址不可达报文,在ICMP报文头之后返回到来方向的IPv4头)IP数据流。

·         ipv6:显示所有IPv6数据流,包括内含IPv6报文头的IPv4报文,如6to4Teredo,以及ISATAP数据流。

·         tcp:显示所有基于TCP的数据流。

应用过滤器:

·         bootp:显示所有DHCP数据流(基于BOOTP)。

·         dns:显示包括TCP区域传输以及基于标准UDPDNS请求和回复在内的所有DNS数据流。

·         tftp:显示所有TFTPTrivial 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数据流,比如USERPASS,或RETR命令。

字符过滤器:

·         tcp.analysis.flags:显示所有包含TCP分析标识的所有报文,包括报文丢失,重传,或零窗口标识。

·         tcp.analysis,zero_window:显示含有表明发送方的接收缓存用完标识的报文。

了解字段名:

很多显示过滤器都是基于字段名(例如http.host)。要了解字段名,在Packet list面板选中字段查看Status条,如下图所示。

image002.png

本例中,我们在Packet Display面板中选中第10帧,然后在Packet Details面板中展开HTTP报文头。之后在报文的HTTP段点击Request Method行,状态条表明这一字段称为http.request.method

我们在显示过滤器区域输入http.request.method以显示所有包含这一字段的报文。如下图所示,注意到Status条表明此抓包文件包含2011个报文只有101个报文符合过滤条件。

image003.png

这是一个很好用的过滤器,以确定HTTP客户端请求了哪些内容。网络服务器不发送HTTP request method,它们发送HTTP响应代码。

使用自动完成功能:

当你在过滤器区域输入http.request.method的时候,Wireshark打开一个窗口让你遍历过滤器选项。当你输入http.(包括点号),你会看到所有可能的以此为开头的显示过滤条件列表。继续输入http.request. ,会看到以这一短语为开头的过滤条件,如下图所示:

image004.png

可以使用这一自动完成功能查看所有可用的过滤条件。例如,输入tcp. Wireshark会列出所有可用的TCP过滤条件。如果输入tcp.analysis. Wireshark会列出所有处理TCP问题与性能的TCP analysis过滤条件,如下图:

image005.png

显示过滤器比较运算符:

通过扩展过滤条件可查找某一域值,Wireshark针对此功能支持数字比较运算符。

1. ==eq

例如:ip.src == 10.2.2.2

显示所有源地址为10.2.2.2IPv4数据流

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个以上answerDNS响应报文

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.2ip.src==10.2.2.2的效果是相同的。

使用Expressions:

当你实在不知道该过滤些什么的时候,使用显示过滤器工具栏的Expression按钮。在Filter Expression窗口,输入感兴趣的应用或协议名,跳转到Field Name列表中相应条目。Relation选项用来添加一个比较运算符,窗口右端是预先定义的值。点击Apply按钮完成。

image006.png

编辑和使用默认过滤器:

Wireshark提供15个缺省显示过滤器供创建新的显示过滤器时参考。点击Filter按钮或点击Display Filter按钮打开显示过滤器窗口,如下图所示:

image007.png

下图显示了缺省过滤器列表,选中之后点击OK

image008.png

小心使用缺省过滤器。以太网和IP主机过滤器可能与实际网络不符。使用之前必须编辑或作为创建参考。

小贴士:

显示过滤器保存在一个名为dfilters的文件中,可以使用任何文本编辑器来进行编辑。要找到你的dfilters文件,首先在Status条的右端查找当前profile名。如果这一区域表明你在默认profile,选择Help\About Wireshark\Folders并双击Personal Configuration文件夹链接,dfilters文件就在这个目录里。

             

Zhang_Jiawen
4 Beryllium

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

一站式学习Wireshark(十):应用Wireshark显示过滤器分析特定数据流(下)

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

介绍

掌握显示过滤器对于网络分析者来说是一项必备的技能。这是一项大海捞针的技巧。学会构建,编辑,保存关键的显示过滤器能够节省数小时的时间。


与捕捉过滤器使用的BPF语法不同,显示过滤器使用的是Wireshark特定的格式。除了某些特例之外,Wireshark显示过滤器和捕捉过滤器有很大的区别。


更多信息

过滤HTTP数据流:

在排查网页浏览器会话或检查网速过慢问题时,对浏览器会话进行过滤就显得尤为重要。过滤HTTP数据流有两种方式:

http

tcp.port==xx(xx表示所使用的HTTP端口)

第二种过滤方法更加有效。让我们通过分别对网页浏览会话应用两个过滤条件来比较一下:

基于TCP端口号的应用过滤

本例中的抓包文件包含与网站www.wireshark.org的链接以及请求下载Wireshark的请求。我们使用tcp.port==80的显示过滤器并且发现,确实,所有报文都符合条件,如下图所示。很好这就是我们想要的结果。

image002.png

我们仔细看报文20Protocol列,Wireshark并没有在报文中看到任何HTTP命令或回复,因此HTTP协议分析器没有被应用于此报文。它只是一个TCP报文(TCP ACK, FIN, RST,以及三路TCP握手信号都列成TCP)。


如果你想要查看TCP连接建立,维护以及关闭报文,就应该使用上述过滤条件(并且你会一直看到这些TCP报文)。

谨慎使用基于TCP的应用名过滤

现在来看一下对数据流应用http过滤条件的情况。下图中,你会看到Wireshark显示了13353个报文。这些是Protocol列中包含HTTP的报文。

image003.png

这是整个网站浏览会话的一部分,使用HTTP过滤条件我们无法检测出TCP错误,对于应用永远是使用端口号过滤器优于TCP

小贴士:

不幸的是,Wireshark对于HTTP数据流的缺省过滤是http。可以考虑将缺省对HTTP数据流的过滤改为基于端口号。

按照某一IP地址或主机过滤报文

对于IPv4数据流,我们使用字段名ip.srcip.dstip.addr;对于IPv6数据流,使用ipv6.srcipv6.dstipv6.host以及ipv6.addr。注意当你在Packet Details面板中点击IP地址时,将会看到它们被称为:ip.srcip.dst, ipv6.srcipv6.dst。字段名ip.hostipv6.hostip.addr以及ipv6.addr不在报文里。

ip.hostipv6.host过滤条件在IPv4/IPv6源和目的地址字段查找解析为指定主机名的IPv4IPv6地址。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.orgIP地址。

按照某一IP地址范围过滤报文

可以使用><比较运算符或逻辑运算符&&查找某一地址范围内的报文。

·         例如:ip.addr>10.3.0.1&&ip.addr<10.3.0.5

显示来自或发往10.3.0.210.3.0.310.3.0.4的数据流。

·         例如:(ip.addr>=10.3.0.1&&ip.addr<=10.3.0.6)&&!ip.addr==10.3.0.3

显示来自或发往10.3.0.110.3.0.210.3.0.410.3.0.510.3.0.6的数据流,10.3.0.3排除在外。

·         ipv6.addr>=fe80::&&ipv6.addr<fec0::

显示IPv6地址从0xfe800xfec0开头的数据流。

按照某一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.310.2开头的数据流.

使用右键|作为过滤条件

如下图所示:在某一帧的Packet Details面板,扩展HTTP部分,右键Request URI一行,选择Apply as Filter | Selected

image004.png

Wireshark会创建合适的显示过滤条件(http.request.rui==”/”)并应用于抓包文件。之后过滤得到2个报文,显示用户从两个不同的IP地址访问主页内容,如下图所示。

image005.png

如果你想排除这类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请求。

过滤单个TCPUDP会话

当你想要观察客户端应用于服务器进程之间的通讯,你需要查找的是一个“会话“。会话是基于客户端应用和服务器进程的IP地址和端口号。通常抓包文件中会包含数百个会话,了解如何快速定位及过滤无疑是很有帮助的。

以下两种常用方式可从抓包文件中提取单一TCPUDP会话:

·         通过在Packet List面板右键一个TCPUDP报文并选择Conversation Filter | [TCP|UDP].

·         通过在Packet List面板右键一个TCPUDP报文并选择Follow [TCP|UDP] Stream

右键选择Conversation Filter

通过在Packet List面板右键一个TCPUDP报文并选择Conversation Filter | TCP如下图所示:

image006.png

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面板右键一个TCPUDP报文并选择Follow [TCP|UDP] Stream,如下图所示。如果选择Follow UDP Stream,显示过滤条件会基于IP地址和端口号。如果选择Follow TCP Stream, 显示过滤条件会基于TCP Stream Index number

image007.png

错误的用法导致不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的报文。其他协议报文,必须UDPARP报文也符合这一过滤条件,因为它们的TCP SYN bit没有设置为1

正确tcp.flags.syn=1

只显示包含SYN设置为0TCP报文。

小贴士:

当你知道只有一个字段符合你的过滤字段名的时候,不要害怕使用!=运算符。有时,这是最好用的过滤运算符。

             

0 项奖励
Zhang_Jiawen
4 Beryllium

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

完结了。后面如果看到有合适的内容我再补充上来。

据说,Wireshark培训需要花费一两千美元,所以这个帖子算是个福利贴吧~

我想即便看完这个帖子,肯定还是有相当的问题无法找到答案,如果大家有任何问题都可以在帖子里留言。

谢谢大家。

0 项奖励
finking
2 Bronze

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

我有个问题想请教一下:

当抓到的数据包中有多个内容一样,就是二层的源MAC,目的MAC不一样。这样的情况如何删除其中一个重复的包?

过滤目的是为了,过滤后能显示详细的信令流程。麻烦帮忙看一下,谢谢!

无标题.png

0 项奖励
Zhang_Jiawen
4 Beryllium

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

如果是为了更清楚的看信令流程的话,可以用图的形式。看Statistics | Flow Graph, 然后打开Graph Analysis窗口。

补充一点,当debug一个phone call的时候,首先应当使用Call-ID参数(在SIP header中的message header,Apply as Filter)。

0 项奖励
finking
2 Bronze

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(8月6日完结)

恩,谢谢!但是如果没有把两个重复包过滤掉一个的话在Graph analysis里面某个请求就会有同一请求有两个报文,这样不方便写报告。图中的数据就是对一个用户做功能测试流程的抓包(一个Call)。

场景是:A-->B-->C,源ip和目的为A和C,B做了个二层转发,这样就有了两个二层不同其他相同的报文。

0 项奖励
Zhang_Jiawen
4 Beryllium

Re: 如果看了这个你还是不会用Wireshark,那就来找我吧(8月6日完结)

按二层地址过滤能实现不,示例:只显示从某个地址发出和到某个地址的报文,eth.src == mac_value and eth.dst == mac_value, 或不显示某地址的报文: !eth.addr == mac_value

0 项奖励