抓包工具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 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

我为何需要使用空接口?

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

1835
来自专栏Python入门

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

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

1634
来自专栏python3

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

762
来自专栏炉边夜话

写程序应该注意的地方

1. 对于文本编辑框,一定要判断是否含有非法字符。对于数字型一定要判断是否含有非数字。对于字符型,一定要判断是否在允许的字符内。

1213
来自专栏JAVA烂猪皮

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

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

862
来自专栏程序员叨叨叨

听说你们家的NotifyDataSetChanged不起作用了

前几天,公司项目准备上线,就在前一晚,出现了一个BUG:主页界面刷新无效。千钧一发之际,用了一个笨方法,每次刷新的时候重新setAdapter一下算是实现了基本...

732
来自专栏诸葛青云的专栏

C语言被忽视的一些小东西!C语言基础教程之错误处理

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或...

700
来自专栏杨建荣的学习笔记

从sysbench中学习Lua

我做事喜欢结果导向,喜欢快速迭代,能10分钟搞定,绝对不愿意花15分钟。但是技术行当,还是得耐得住寂寞,因为很多事情10分钟搞不定,可能100分钟,100...

2735
来自专栏个人随笔

eclipse 设置文本模板中 insert variable... 函数 详解

设置文本模板简要图:     设置文本模板详细过程:http://www.cnblogs.com/lsy131479/p/8478711.html ? 此处引出...

2796
来自专栏IT可乐

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

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

22210

扫码关注云+社区