使用WireShark搜索想要的包(简约版)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用WireShark搜索想要的包(简约版)相关的知识,希望对你有一定的参考价值。
参考技术A 我们通过tcpdump从服务器抓下来的包,通过WireShark打开后,是一堆原始数据。如何在成千上万条原始数据中找到我们想要的数据呢?本文章提供两个最常用的方法供大家参考。WireShark提供两个搜索栏供大家使用,一个搜索栏在主页面正上方,中间有“应用显示过滤器的字样”,我们可以在这个搜索栏中输入例如来源Ip,目标Ip,端口等条件来检索数据,下面写几个最常用的:
所有ip为10.45.1.1发送给端口为80或者80端口发出的tcp包:
ip.src == 10.45.1.1 && tcp.port == 80
所有TCP长度大于7byte的包:
tcp.len >= 7
所有http协议方法为POST,Path为/api/getUser.do的包
http.request.method=="POST" && http.request.uri == "/api/getUser.do"
显示包含TCP SYN标志的封包:
tcp.flags.syn == 0x02
tcp.window_size == 0 && tcp.flags.reset != 1
WireShark还允许精准的字符串搜索,在MAC系统中,COMMAND+F就能把字符串搜索给调出来,我们选择下过滤器,一般我都会选择字符串过滤器。
对于这个搜索栏,有多个选项,第一个选项最重要,选择分组字节流才能将所有包内容一网打尽,如果知道自己包的编码,也一定要选择正确的编码才行,然后填写完字符串后就能搜索了:
搜索完成后,页面会自动跳转到搜索结果条上去,搜索结果那一行会变灰,然后我们右键选择搜索出来的那一行,然后选择追踪流-》TCP流,就能看到传输的内容了:
PS,如果在MAC本机抓包,WireShark会提示没有网卡访问权限,这个时候执行下面的命令即可:
sudo chmod 777 /dev/bpf*
Wireshark的搜索功能
参考技术A 在使用Wireshark的时候,通常都是先用“捕获过滤器”、“显示过滤器”来进行数据包的筛选。对于经过筛选后的数据包,再根据自己的需要进行单独分析。
但是有时候,我们只知道一些关键词,并不清楚这些关键字怎么在“捕获过滤器”或者“显示过滤器”中怎么输入。在这种情况下,搜索功能就体现出它的价值来。
第一步为什么是过滤呢?
因为通常在现场的环境中,我们抓到的包都非常多,但是我们关注的往往只是其中的一小部分数据包,所以往往第一步都是进行过滤。过滤的方法有两种,通过“捕获过滤器”过滤和“显示过滤”进行过滤。
本来搜索功能是一个简单的功能,并不需要写笔记的。但是Wireshark默认的设置并不怎么合理,导致相比于其他软件,有点不那么人性化。
Wireshark中的搜索包功能叫做“Find Packet”,可以在【Edit】->【Find Packet】中打开。
为了更方便的描述搜索功能该怎么用,我把操作步骤写在了下面的这张图中:
关于Wireshark中的正则表达式
由于正则表达式是一个较大的概念,不同软件中遵守的标准并不完全一致。根据Wireshark官方文档《Wireshark User’s Guide-Version 3.1.0》中的描述,Wireshark遵循的是PCRE(Perl-compatible regular expressions).
PCRE的语法比 POSIX正则表达式 和其他许多正则表达式库更加强大和灵活。
关于加密数据
对于采用了加密协议(例如HTTPS)的数据,如果采用搜索字节流的时候,很可能搜索不到内容。
但是对于采用非加密协议(例如HTTP)的数据,我们可以采用搜索字节流的方式,来搜索包里面的细节。
同时可以参考其他文档
--使用WireShark搜索想要的包(简约版)
Linux中国--关于BPF的介绍
永久读取/dev/bpf*这个路径
顺便说一句,“捕获过滤器”应该适量的少用,尤其是在你对你分析的协议不是很清楚的情况下。比如有的协议在进行数据交换之前先需要发送一个ARP数据包(以广播的形式),如果你通过“捕获过滤器”限制了目的地址,那么这个ARP包就肯定抓不到了。
以上是关于使用WireShark搜索想要的包(简约版)的主要内容,如果未能解决你的问题,请参考以下文章