WireShark 过滤语法

 

WireShark 过滤语法

1. 过滤IP,如来源IP或者目标IP等于某个IP
例子:
ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107
或者
ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP

2. 过滤端口
例子:
tcp.port eq 80 // 不管端口是来源的还是目标的都显示
tcp.port == 80
tcp.port eq 2722
tcp.port eq 80 or udp.port eq 80
tcp.dstport == 80 // 只显tcp协议的目标端口80
tcp.srcport == 80 // 只显tcp协议的来源端口80

udp.port eq 15000

过滤端口范围
tcp.port >= 1 and tcp.port <= 80

3. 过滤协议
例子:
tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
oicq
bootp
等等

排除arp包,如!arp 或者 not arp

4. 过滤MAC
太以网头过滤
eth.dst == A0:00:00:04:C5:84 // 过滤目标mac
eth.src eq A0:00:00:04:C5:84 // 过滤来源mac
eth.dst==A0:00:00:04:C5:84
eth.dst==A0-00-00-04-C5-84
eth.addr eq A0:00:00:04:C5:84 // 过滤来源MAC和目标MAC都等于A0:00:00:04:C5:84的

less than 小于 < lt
小于等于 le

等于 eq

大于 gt
大于等于 ge

不等 ne


5. 包长度过滤
例子:
udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和
tcp.len >= 7 指的是ip数据包(tcp下面那块数据),不包括tcp本身
ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后
frame.len == 119 整个数据包长度,从eth开始到最后

eth ---> ip or arp ---> tcp or udp ---> data

6. http模式过滤
例子:
http.request.method == "GET"
http.request.method == "POST"
http.request.uri == "/img/logo-edu.gif"
http contains "GET"
http contains "HTTP/1."

// GET包
http.request.method == "GET" && http contains "Host: "
http.request.method == "GET" && http contains "User-Agent: "
// POST包
http.request.method == "POST" && http contains "Host: "
http.request.method == "POST" && http contains "User-Agent: "
// 响应包
http contains "HTTP/1.1 200 OK" && http contains "Content-Type: "
http contains "HTTP/1.0 200 OK" && http contains "Content-Type: "
一定包含如下
Content-Type:


7. TCP参数过滤
tcp.flags 显示包含TCP标志的封包。
tcp.flags.syn == 0x02   显示包含TCP SYN标志的封包。
tcp.window_size == 0 && tcp.flags.reset != 1

8. 过滤内容

tcp[20]表示从20开始,取1个字符
tcp[20:]表示从20开始,取1个字符以上
tcp[20:8]表示从20开始,取8个字符
tcp[offset,n]

udp[8:3]==81:60:03 // 偏移8个bytes,再取3个数,是否与==后面的数据相等?
udp[8:1]==32 如果我猜的没有错的话,应该是udp[offset:截取个数]=nValue
eth.addr[0:3]==00:06:5B

例子:
判断upd下面那块数据包前三个是否等于0x20 0x21 0x22
我们都知道udp固定长度为8
udp[8:3]==20:21:22

判断tcp那块数据包前三个是否等于0x20 0x21 0x22
tcp一般情况下,长度为20,但也有不是20的时候
tcp[8:3]==20:21:22
如果想得到最准确的,应该先知道tcp长度

matches(匹配)和contains(包含某字符串)语法
ip.src==192.168.1.107 and udp[8:5] matches "\\x02\\x12\\x21\\x00\\x22"
ip.src==192.168.1.107 and udp contains 02:12:21:00:22
ip.src==192.168.1.107 and tcp contains "GET"
udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。

例子:
得到本地qq登陆数据包(判断条件是第一个包==0x02,第四和第五个包等于0x00x22,最后一个包等于0x03)
0x02 xx xx 0x00 0x22 ... 0x03
正确
oicq and udp[8:] matches "^\\x02[\\x00-\\xff][\\x00-\\xff]\\x00\\x22[\\x00-\\xff]+\\x03$"
oicq and udp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x00\\x22[\\x00-\\xff]+\\x03$" // 登陆包
oicq and (udp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x03$" or tcp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x03$")
oicq and (udp[8:] matches "^\\x02[\\x00-\\xff]{2}\\x00\\x22[\\x00-\\xff]+\\x03$" or tcp[20:] matches "^\\x02[\\x00-\\xff]{2}\\x00\\x22[\\x00-\\xff]+\\x03$")

不单单是00:22才有QQ号码,其它的包也有,要满足下面条件(tcp也有,但没有做):
oicq and udp[8:] matches "^\\x02[\\x00-\\xff]+\\x03$" and !(udp[11:2]==00:00) and !(udp[11:2]==00:80)
oicq and udp[8:] matches "^\\x02[\\x00-\\xff]+\\x03$" and !(udp[11:2]==00:00) and !(udp[15:4]==00:00:00:00)
说明:
udp[15:4]==00:00:00:00 表示QQ号码为空

udp[11:2]==00:00 表示命令编号为00:00
udp[11:2]==00:80 表示命令编号为00:80
当命令编号为00:80时,QQ号码为00:00:00:00

得到msn登陆成功账号(判断条件是"USR 7 OK ",即前三个等于USR,再通过两个0x20,就到OK,OK后面是一个字符0x20,后面就是mail了)
USR xx OK mail@hotmail.com
正确
msnms and tcp and ip.addr==192.168.1.107 and tcp[20:] matches "^USR\\x20[\\x30-\\x39]+\\x20OK\\x20[\\x00-\\xff]+"

9. dns模式过滤

10. DHCP
以寻找伪造DHCP服务器为例,介绍Wireshark的用法。在显示过滤器中加入过滤规则,
显示所有非来自DHCP服务器并且bootp.type==0x02(Offer/Ack)的信息:
bootp.type==0x02 and not ip.src==192.168.1.1

11.msn
msnms && tcp[23:1] == 20 // 第四个是0x20的msn数据包
msnms && tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5A
msnms && tcp[20:3]=="USR" // 找到命令编码是USR的数据包
msnms && tcp[20:3]=="MSG" // 找到命令编码是MSG的数据包
tcp.port == 1863 || tcp.port == 80

如何判断数据包是含有命令编码的MSN数据包?
1)端口为1863或者80,如:tcp.port == 1863 || tcp.port == 80
2)数据这段前三个是大写字母,如:
tcp[20:1] >= 41 && tcp[20:1] <= 5A && tcp[21:1] >= 41 && tcp[21:1] <= 5A && tcp[22:1] >= 41 && tcp[22:1] <= 5A
3)第四个为0x20,如:tcp[23:1] == 20
4)msn是属于TCP协议的,如tcp

MSN Messenger 协议分析
http://blog.csdn.net/Hopping/archive/2008/11/13/3292257.aspx
MSN 协议分析
http://blog.csdn.net/lzyzuixin/archive/2009/03/13/3986597.aspx

更详细的说明

<<wireshark过滤表达式实例介绍>>
http://www.csna.cn/viewthread.php?tid=14614
wireshark过滤表达式实例介绍~~
wireshark, 实例, 表达
----------------------------------------------------------------------------------------
1、wireshark基本的语法字符

\d          0-9的数字
\D          \d的补集(以所以字符为全集,下同),即所有非数字的字符
\w          单词字符,指大小写字母、0-9的数字、下划线
\W          \w的补集
\s          空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f
\S          \s的补集
.          除换行符\n外的任意字符。 在Perl中,“.”可以匹配新行符的模式被称作“单行模式”
.*       匹配任意文本,不包括回车(\n)? 。 而,[0x00-0xff]*        匹配任意文本,包括\n
[…]          匹配[]内所列出的所有字符
[^…]          匹配非[]内所列出的字符

----------------------------------------------------------------------------------------
2、定位字符  所代表的是一个虚的字符,它代表一个位置,你也可以直观地认为“定位字符”所代表的是某个字符与字符间的那个微小间隙。

^          表示其后的字符必须位于字符串的开始处
$          表示其前面的字符必须位于字符串的结束处
\b          匹配一个单词的边界
\B          匹配一个非单词的边界

----------------------------------------------------------------------------------------
3、重复描述字符

{n}          匹配前面的字符n次
{n,}          匹配前面的字符n次或多于n次
{n,m}          匹配前面的字符n到m次
?          匹配前面的字符0或1次
+          匹配前面的字符1次或多于1次
*          匹配前面的字符0次或式于0次

----------------------------------------------------------------------------------------
4、and or 匹配

and 符号 并
or  符号 或
例如:
tcp and tcp.port==80
tcp or udp

----------------------------------------------------------------------------------------
5、wireshark过滤匹配表达式实例

5.1、搜索按条件过滤udp的数据段payload(数字8是表示udp头部有8个字节,数据部分从第9个字节开始udp[8:])
udp[8]==14        (14是十六进制0x14)匹配payload第一个字节0x14的UDP数据包
udp[8:2]==14:05 可以udp[8:2]==1405,且只支持2个字节连续,三个以上须使用冒号:分隔表示十六进制。 (相当于 udp[8]==14 and udp[9]==05,1405是0x1405)
udp[8:3]==22:00:f7 但是不可以udp[8:3]==2200f7
udp[8:4]==00:04:00:2a,匹配payload的前4个字节0x0004002a
而udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP数据包,不一定是从第一字节匹配。
udp[8:4] matches "\\x14\\x05\\x07\\x18"
udp[8:] matches "^\\x14\\x05\\x07\\x18\\x14"

5.2、搜索按条件过滤tcp的数据段payload(数字20是表示tcp头部有20个字节,数据部分从第21个字节开始tcp[20:])
tcp[20:] matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a"
等同http matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a"

tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a"
tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: (.*?)pplive(.*?)\\x0d\\x0a"
tcp[20:] matches "^GET (.*?)HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*Host: "
tcp[20:] matches "^POST / HTTP/1.1\\x0d\\x0a[\\x00-\\xff]*\\x0d\\x0aConnection: Keep-Alive\\x0d\\x0a\\x0d\\x0a"

检测SMB头的smb标记,指明smb标记从tcp头部第24byte的位置开始匹配。
tcp[24:4] == ff:53:4d:42

检测SMB头的smb标记,tcp的数据包含十六进制ff:53:4d:42,从tcp头部开始搜索此数据。
tcp contains ff:53:4d:42
tcp matches "\\xff\\x53\\x4d\\x42"

检测tcp含有十六进制01:bd,从tcp头部开始搜索此数据。
tcp matches "\\x01\\xbd"

检测MS08067的RPC请求路径
tcp[179:13] == 00:5c:00:2e:00:2e:00:5c:00:2e:00:2e:00
                  \      .     .     \     .     .
5.3、其他
http.request.uri matches ".gif$" 匹配过滤HTTP的请求URI中含有".gif"字符串,并且以.gif结尾(4个字节)的http请求数据包($是正则表达式中的结尾表示符)
注意区别:http.request.uri contains ".gif$" 与此不同,contains是包含字符串".gif$"(5个字节)。匹配过滤HTTP的请求URI中含有".gif$"字符串的http请求数据包(这里$是字符,不是结尾符)

eth.addr[0:3]==00:1e:4f 搜索过滤MAC地址前3个字节是0x001e4f的数据包。

 

<<Wireshark 主界面的操作菜单中英对比>>
http://www.csna.cn/viewthread.php?tid=9645&extra=page%3D1
Wireshark 主界面的操作菜单中英对比
Wireshark, 菜单, 界面
File  打开文件
    Open                       打开文件
    Open Recent         打开近期访问过的文件
    Merge…                 将几个文件合并为一个文件
    Close                     关闭此文件
    Save As…             保存为…
    File Set                  文件属性
    Export                    文件输出
    Print…                   打印输出
    Quit                        关闭

Edit  编辑
    Find Packet…                           搜索数据包
    Find Next                                   搜索下一个
    Find Previous                          搜索前一个
    Mark Packet (toggle)              对数据包做标记(标定)
    Find Next Mark                        搜索下一个标记的包
    Find Previous Mark                搜索前一个标记的包
    Mark All Packets                     对所有包做标记
    Unmark All Packets               去除所有包的标记
    Set Time Reference (toggle) 设置参考时间 (标定)
    Find Next Reference                搜索下一个参考点
    Find Previous Reference       搜索前一个参考点
    Preferences                             参数选择

View 视图
    Main Toolbar                主工具栏
    Filter Toolbar               过滤器工具栏
    Wireless Toolbar       无线工具栏
    Statusbar                    运行状况工具栏
    Packet List                  数据包列表
    Packet Details            数据包细节
    Packet Bytes              数据包字节
    Time Display Format        时间显示格式
    Name resolution               名字解析(转换:域名/IP地址,厂商名/MAC地址,端口号/端口名)
    Colorize Packet List        颜色标识的数据包列表
    Auto Scroll in Live Capture 现场捕获时实时滚动
    Zoom In                         放大显示
    Zoom Out                     缩小显示
    Normal Size                 正常大小
    Resize All Columns          改变所有列大小
    Expand Sub trees            扩展开数据包内封装协议的子树结构
    Expand All                         全部扩展开
    Collapse All                      全部折叠收缩
    Coloring Rules…            对不同类型的数据包用不同颜色标识的规则
    Show Packet in New Window   将数据包显示在一个新的窗口
    Reload                                           将数据文件重新加

Go  运行
    Back                                              向后运行
    Forward                                         向前运行
    Go to packet…                             转移到某数据包
    Go to Corresponding Packet    转到相应的数据包
    Previous Packet                          前一个数据包
    Next Packet                                 下一个数据包
    First Packet                                 第一个数据包
    Last Packet                                 最后一个数据包

Capture 捕获网络数据
    Interfaces…                选择本机的网络接口进行数据捕获
    Options…                   捕获参数选择
    Start                             开始捕获网络数据
    Stop                            停止捕获网络数据
    Restart                       重新开始捕获
    Capture Filters…      选择捕获过滤器

Analyze 对已捕获的网络数据进行分析
    Display Filters…           选择显示过滤器
    Apply as Filter               将其应用为过滤器
    Prepare a Filter            设计一个过滤器
    Firewall ACL Rules      防火墙ACL规则
    Enabled Protocols…   已可以分析的协议列表
    Decode As…                 将网络数据按某协议规则解码
    User Specified Decodes…    用户自定义的解码规则
    Follow TCP Stream            跟踪TCP传输控制协议的通信数据段,将分散传输的数据组装还原
    Follow SSL stream           跟踪SSL 安全套接层协议的通信数据流
    Expert Info                          专家分析信息
    Expert Info Composite    构造专家分析信息

Statistics对已捕获的网络数据进行统计分析
    Summary                     已捕获数据文件的总统计概况
    Protocol Hierarchy      数据中的协议类型和层次结构
    Conversations            会话
    Endpoints                   定义统计分析的结束点
    IO Graphs                   输入/输出数据流量图
    Conversation List      会话列表
    Endpoint List               统计分析结束点的列表
    Service Response Time       从客户端发出请求至收到服务器响应的时间间隔
    ANSI                        按照美国国家标准协会的ANSI协议分析
    Fax T38 Analysis...         按照T38传真规范进行分析
    GSM                         全球移动通信系统GSM的数据
    H.225                       H.225协议的数据
    MTP3                        MTP3协议的数据
    RTP                         实时传输协议RTP的数据
    SCTP                        数据流控制传输协议SCTP的数据
    SIP...                         会话初始化协议SIP的数据
    VoIP Calls               互联网IP电话的数据
    WAP-WSP               无线应用协议WAP和WSP的数据
    BOOTP-DHCP        引导协议和动态主机配置协议的数据
    Destinations…        通信目的端
    Flow Graph…          网络通信流向图
    HTTP                        超文本传输协议的数据
    IP address…          互联网IP地址
    ISUP Messages…  ISUP协议的报文
    Multicast Streams   多播数据流
    ONC-RPC Programs 
    Packet Length         数据包的长度
    Port Type…              传输层通信端口类型
    TCP Stream Graph 传输控制协议TCP数据流波形图

Help 帮助
    Contents Wireshark          使用手册
    Supported Protocols         Wireshark支持的协议清单
    Manual Pages                   使用手册(HTML网页)
    Wireshark Online              Wireshark 在线
    About Wireshark               关于Wireshark

 

 

 

学习Ethereal/Wireshark网站
http://www.csna.cn/index.php

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值