抓包工具Wireshark过滤规则实践第一篇

引子

现在从网上看到的一些wireshark过滤规则的介绍,都是比较老一点的,新版本的语法好像有所变化,所以在这里写一篇基于最新的1.12版本的wireshark规则系列。

题外话

毕业后接触过不少和网络相关的东西,开始的时候是视频相关的,后来到无线协议相关,到现在的html,每次都少不了和网络数据包打交道。避免不了接触一些抓包工具,有wirshark,fidder,http-analyzer等,甚至还使用过浏览器自带的网络工具。Fidder,http-analyzer都是针对http、https协议的,所以使用起来就有一定的局限性,wireshark就不一样了,它使用WinPCAP作为接口,直接与网卡进行数据报文交换,保证了数据的完整性。

开头说的废话太多,可能遭到大家的吐槽。So,言归正传,本文先从wireshark的使用说起,之后还会推出几个比较实用的抓包工具的说明,请大家拭目以待。

本文根据wireshark1.12编写。

wireshark过滤器简要介绍

捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。

显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。

下面我就显示过滤讲一些比较实用的规则,介绍的规则都是用http做举例,其他的协议类似。

1. 直接协议过滤

针对协议的过滤,例如:http、arp、tcp、udp等。这种过滤是最简单的过滤方式,例如我要去抓取某个http请求的数据包,这样最直接,能直接看到网络请求和回复。这种过滤方式直接使用协议名称就可以进行过滤。如果对协议不了解,请看我的另一篇文章,《网络七层模型及各层协议》

有的人可能会问,图片中过滤的还http协议的包,怎么还有SSDP的包,你可以百度一下SSDP就知道了。

2. 值比较过滤

值比较使用到协议的属性值。也许有些人要问:什么是协议属性。你可以直接在过滤窗口输入”http.”,wireshark就会自动提示你接下来需要输入的属性值,你将会看到一列属性。

我们可以通过简单的语句来做过滤。例如:

http.accept 注释:表示过滤http协议中存在accept头的包

使用比较运算符,wireshark提供了六种比较运算符:==,!=,>,>=,<,<=。对应的英文也能实现相同功能,对应关系如下表:

数字部分可以使用十进制,八进制,十六进制方式。表达样式可供多种选择:

ip.len le 1500

ip.len le 02734

ip.len le 0x436

eth.dst == ff:ff:ff:ff:ff:ff

eth.dst == ff-ff-ff-ff-ff-ff

eth.dst == ffff.ffff.ffff

ip.addr == 129.111.0.0/16

http.request.uri == “http://www.wireshark.org/”

举个例子:

http.accept == “XXX” 注释:XXX表示accept可能出现的字符串,最常用的是*/*

其他协议,其他属性类似,大家可以按照上述方式平时多练习,就能熟练记住各个协议的使用场景。

3. 表达式组合过滤

说到表达式组合过滤,需要使用到逻辑运算符

使用表达式组合过滤,可以更准确的拿到自己想要的网络包。在使用组合过滤时,必须深刻理解这些符号的含义。

举个例子:

注意:在使用!=比较符结合eth.addr,ip.addr,tcp.port,udp.port等使用时,某些情况下可能无法达到你的预期。

举个例子:

我们经常使用ip.addr == 1.2.3.4来过滤网络包的IP地址中包含1.2.3.4地址的包。那么如何过滤网络数据包中不包含1.2.3.4这个地址的包呢,自然而然我们就会想到使用ip.addr != 1.2.3.4。但是,这个表达式可能不会得到你预期的结果。

这个表达式的含义是:包含名字为ip.addr,但值不等于1.2.3.4数据的包。众所周知,一个网络包中包含两个ip地址:源地址,目的地址。大部分情况下(自己发给自己除外),源地址和目的地址是不同的,那么肯定会满足有一个值不等于1.2.3.4。所以这个过滤表达式没有达到我们的预期。那么该如何写我们想要的表达式呢?

如果想达到我们的期望,应该这么写:!(ip.addr == 1.2.3.4),有个图可能更好理解:

今天我就先讲到这里,真正的过滤规则如何使用,需要结合自己的实际。

接下来,还会推出其他过滤工具的讲解,希望大家一起进步。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沈唁志

浅谈PHP中的设计模式

1763
来自专栏desperate633

浅谈servlet的生命周期servlet的生命周期详解servlet生命周期中三大重要的时刻

servlet从被加载到销毁经历了多个阶段,其中需要我们十分了解每个阶段的意义作用,才能更好地编写相关的servlet程序。

932
来自专栏玄魂工作室

Python爬虫之urllib模块2

--------------------------------------------------------------------------------...

2935
来自专栏python3

python 装饰器构造优酷视频登录程序

952
来自专栏玄魂工作室

如何学python-第四课 基本的用户输入

译者注:原作者留的练习任务都比较灵活,并不是具体的要求。而根据我自身的经验,很多同学看到这种需要探索精神的要求,可能就不愿意自己去进一步探索了(或者不知道具体要...

3098
来自专栏IT可乐

深入理解计算机系统(4.1)------Y86指令集体系结构

  本章我们将进入处理器体系结构介绍的神秘海洋中,我们熟悉的手机,电脑等设备的核心硬件都离不开处理器。处理器可以称的上是人类创造的最复杂的系统之一,一块手指大小...

26610
来自专栏Python入门

这4个Python实战项目,让你瞬间读懂Python!

Python当下真的很火。Python实战项目,也一直尤为关注,接下来,和大家介绍下十个Python练手的实战项目

1964
来自专栏Python小屋

Python代码优化之in关键字

如果经常需要测试一个序列中是否包含某个元素,最好使用字典或集合,尽量不使用列表。 import random import time x_list = list...

2798
来自专栏JAVA烂猪皮

BAT面试常的问题和最佳答案

客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将reques...

1022
来自专栏张善友的专栏

我为何需要使用空接口?

FxCop设计规则中的第三条提供了对空接口的检查.下面是它的描述: 一个接口提供了一组行为和使用契约(usage contract),任何一个类型都可以实现这个...

1985

扫码关注云+社区

领取腾讯云代金券