首页 > 编程知识 正文

wireshark捕获过滤器语法,wireshark过滤器表达式

时间:2023-05-06 03:32:32 阅读:212045 作者:4560

本文的主题,记录学习Wireshark的一些问题。首先Wireshark是一个网络封包分析软件,其功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料,你可以把它想像成 “电工技师使用电表来量测电流、电压、电阻” 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。

网上下载好wireshark一路默认前进安装后就可以进入wireshark,我们可以看到主要界面大概是这样的。如果底下显示“找不到接口”,你可以尝试管理员打开wireshark解决。

选择无线网就可以看到一个吊炸天的界面(当然大家对应自己想捕获的网络进行选择)


我们用wireshark的目的是捕获数据包再做后续处理(了解还不深入,更多的作用以后用到了再和大家分享),所以现在出现了这么一大堆结果难道要我们在MMP的九千多行中找结果吗,肯定不是哇,所以进入第一个知识点Wireshark过滤表达式。

一、过滤表达式

在顶上有一个搜索栏就是我们写过滤表达式的地方。主要实用有针对性的一些过滤表达式有按协议过滤;按目的端口过滤;按源IP地址过滤;按目的MAC地址过滤;针对长度和内容的过滤等,我们逐个说明,读者可以在自己wireshark进行实验(有点像在写sql的where语句,对的语句搜索栏是绿色的,有错误就是红色的)。

1、针对IP地址的过滤
Cmd输入ipconfig

(1)对源地址为10.136.157.37的包的过滤,即抓取源地址满足要求的包。
表达式为:ip.src ==10.136.157.37
(2)对目的地址为10.136.157.37的包的过滤,即抓取目的地址满足要求的包。
表达式为:ip.dst ==10.136.157.37
(3)对源或者目的地址为10.136.157.37的包的过滤,即抓取满足源或者目的地址的ip地址是10.136.157.37的包。
表达式为:ip.addr ==10.136.157.37或者ip.src ==10.136.157.37 or ip.dst ==10.136.157.37
(4)要排除以上的数据包,我们只需要将其用括号囊括,然后使用 “!”或者”not”即可。
表达式为:!(表达式) not(表达式)

2、针对协议的过滤
(1)仅仅需要捕获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可。
表达式为:http
(2)需要捕获多种协议的数据包,也只需对协议进行逻辑组合即可。
表达式为:http or telnet (多种协议加上逻辑符号的组合即可)
(3)排除某种协议的数据包
表达式为:not arp or !tcp

3、针对端口的过滤(视协议而定)
(1)捕获某一端口的数据包
表达式为:tcp.port == 80
(2)捕获多端口的数据包,可以使用and来连接,下面是捕获高端口的表达式
表达式为:udp.port >= 2048

4、针对长度和内容的过滤
(1)针对长度的过虑(这里的长度指定的是数据段的长度)
表达式为:udp.length < 30 http.content_length <=20
(2)针对数据包内容的过滤
表达式为:http.request.uri matches “blog” (匹配http请求中含有vipscu字段的请求信息)

5、过滤目的Mac地址
在cmd输入ipconfig/all得到mac地址,即物理地址

表达式为:eth.addr==DC-85-DE-F2-06-7D

6、过滤出MAC地址为本机MAC地址,IP地址为非本机IP地址的数据包。
表达式为:eth.addr== DC-85-DE-F2-06-7D and ip.addr != 10.136.157.37

二、利用wireshark捕获ftp的协议交互过程并对此进行分析

接下来我们干点有意思的事情。
首先插个话题,很多人可能想知道如何在本机上搭建ftp服务器。本人win8系统,搭建方法如下:
1.打开“控制面板“,进入“程序”

2.找到“启用或关闭windows功能”,点击打开

3.在“windows功能”中找到“Internet信息服务”,并选中“FTP服务”、“FTP扩展性”和“IIS管理控制台”前的复选框,点击“确定”
等待成功后,在开始屏幕的搜索中输入“IIS”,然后点击打开“IIS管理器”

4.在左栏的“网站”上点击右键,打开“添加FTP站点”,填写相应信息。其中,站点名随意设置,物理路径就是本机电脑上的一个目录,ip地址可设为自己此时的ip地址。其他勾选可以参照自己需求。

5.点击完成就在本机上搭建了一个ftp站点。你可以打开浏览器输入ftp://刚刚输入的ip地址访问。

//——————————————蜜汁分割线——————————————

我们进入正题,打开wireshark,我们以访问ftp.nankai.edu.cn并下载一个文件为例看看在文件传输过程中发生了什么。

首先我们打开wireshark,打开捕获器,输入ip.src ==10.136.157.37 or ip.dst ==10.136.157.37(10.136.157.37改为大家自己的ip,还可以加上“and (tcp or ftp or ftp-data)”)进行监听。
打开cmd,输入ftp ftp.nankai.edu.cn,这时候看wireshark那边可以看到捕获了四个tcp报文和一个ftp报文。这是著名的“三次握手”嘛,不对为啥有四个tcp报文?仔细分析一下,先是客户(我的ip)给服务器(南开的这个ip)发送一个请求报文,之后服务器回复一个ACK报文并为这次连接分配资源,而我们客户端也回复了一个ACK报文并为这次连接分配资源,于是我们收到了服务器发来的ftp报文来欢迎我们“welcome to nankai ftp service”,接到服务器这个报文后客户端又发给服务器一个ACK报文,注意这个报文我们发现和上一个发过去的ACK报文作用应该是一样的,只是明确一下客户端这边建立好连接了,准备发送东西了,所以应该是回应了一下服务器发来的ftp文件而已,还是三次握手。

总结一下:
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。

用的一张图感受一下

好的,挥别三次握手,再次来到cmd,我们使用匿名访问南开ftp站点,用户输入anonymous,cmd这边告诉我们“230 Login successful”。我们来看看wireshark,发现这次我们客户端在上边已经告诉服务器我们要发东西了的情况下果不其然丢出一个ftp报文,带着我们的用户号一起给到了服务器端,于是对面来了一个ACK报文带着FTP报文传来,也就是我们在cmd看到的那个消息。然后,我们又发了一个ACK报文过去,当然作用和刚刚说的一样,“大哥我们还没死呢,你继续等着我的消息哈”。

这时我们点击重新捕获的按钮,接下来好好看看下载文件时传输线上发生了什么。在下载文件前,先做好一些准备工作,首先cmd中输入dir可以看看站点资源,我选择了index.html文件一会下载。然后cmd键入‪lcd C:UsersasDesktopyao把下载地址定在目标位置。接下来我们开始捕获。在cmd键入get index.html,转身看看这边wireshark,霎时间捕获了一堆东西,主要包含的协议有tcp、ftp和ftp-data。我们仔细分析一下。

首先我们发现前三个FTP报文出现两个关键字PORT和PASV,这是什么呢?百度百科一下:
PORT(主动)方式的连接过程是,服务器开放一个端口,通知客户端连接,服务端接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了一个1024+的随机端口,你过来连接我”。于是服务器从20端口向客户端的1024+随机端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的1024+端口发送连接请求,建立一条数据链路来传送数据。

所以这一段交互就是我们像南开站点发了一个port请求,服务器接受请求顺便告诉我们“port请求我们收到啦,不过建议你们用pasv比较好啊”,然后我们像服务器发出RETR(retireve)请求下载index.html,于是服务器发来报文,内容就是百科里说的,“我(服务器)开放了一个端口,你可以来连接了”,我们反手就是一个报文回复“连接上啦哈”,于是服务器又发了一个ftp的报文作为回应“我们服务器端用二进制方式来对index.html文件进行数据传输PS.它有41495bytes这么大”,并且发来ACK报文建立连接。这之后,很明显,index.html这个文件被分成了好多个小号文件以ftp-data方式传输过来,过程中还出现了一下ACK的报文我想应该是重新确认一下连接的作用。

当所有ftp-data的报文发完以后,也就是文件传输完成时候,服务器发来报文告诉我们“所有文件都传完啦”,并且直接有扔过来一个ACK报文,我们客户端也丢回去一个ACK报文,虚晃一枪“大哥谢谢啦,你等等别走我看看还有没需求要找你”

实验做完了当然没需求啦,所以我们cmd键入quit要断开连接,得到回应goodbye。很牛逼,我们看看wireshark那边,先是两个ftp互相告别,接下来就是著名的“四次挥手”。四个TCP一字排开,先是服务器发来了一个FIN,ACK报文告诉对面我不会再读你给我发的消息了,接着我们客户端知道后愤怒地甩回去一个ACK报文告诉服务器“你行,我们热脸不贴冷屁股,既然你不听我也不给你发消息了”。还没完,气还没消我们客户端也丢过去一个FIN,AVK报文,告诉对面礼尚往来,我也不会再鸟你的消息了,作为聊天的最后,服务器来了个最后的了结“断绝一切联系,我再给你发消息我就不是一个好的服务器!”。

嗯,然后嘛他们就失忆了,下一次我们找服务器大哥还是能握握手成为辛勤的盼望。

再来总结一下:
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

再用一张图让大家看的更直观

这就是这次wireshark抓ftp包的实验全过程和分析内容啦。

That’s all thank you

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。