浏览您捕捉的包
在你已经捕捉完成之后,或者打开先前保存的包文件时,通过点击包列表面版中的包,可以在包详情面板看到关于这个包树状结构以及字节面版
通过点击左侧"+"标记,你可以展开树状视图的任意部分。你可以在面板点击任意字段来选择它。例如:在下图“Wireshark选择了一个TCP包后的界面”显示的就是选中TCP字段。同样可以选择TCP包头的应答号(ack:190),同时会出现在下方的字节浏览面版中。
Wireshark选择了一个TCP包后的界面
在Wireshark正在捕捉时,您也可以进行同样的选择。(前提是您在捕捉选项对话框选择了实时更新列表(update list of packet in real time ))
另外,您可以使用分离的窗口浏览单独的数据包,如下图,想要这样做,你只需要在选中包列表面版中您感兴趣的包,菜单 Display->Show Packet in New Windows 。它可以让你很轻松地比较两个或多个包。
在分离窗口浏览包
弹出菜单项
在包列表面板,包详情面板,包字节面板点击右键,都会出现对应的上下文弹出菜单
包列表面板的弹出菜单
下表列出了该面版可用弹出菜单项的概述,主菜单能实现同样功能的菜单项,以及简短的描述。
项目 | 对应主菜单项 | 描述 |
Mark Packet(toggle) | Edit | 标记/取消标记包 |
Set Time Reference(toggle) | Edit | 设置/重设时间参考 |
----- |
|
|
Apply as Filter | Analyze | 用当前选中的项作为过滤显示 |
Prepare a Filter | Analyze | 准备将当前选择项作为过滤器 |
Conversation Filter | - | 将当前选择项的地址信息作为过滤设置。选中该选项以后,会生成一个显示过滤, 用于显示当前包两个地址之间的会话 |
STCP | - | 有待补充 |
Follow TCP Stream | Analyze | 浏览两个节点间的一个完整TCP流所有数据 |
Follow SLL Stream | Analyze | 同上,将TCP替换成SSL理解 |
----- |
|
|
Copy/Summary(TEXT) | - | 将摘要字段复制到剪贴板。(以tab分开的文本) |
Copy/Summary(CVS) | - | 将摘要字段复制到剪贴板,(CVS格式,逗号分开) |
Copy/As Filter | - | 以当前选择项,建立一个显示过滤器,复制到剪贴板 |
Copy/Bytes(Offset Hex Text) | - | 以16进制转储格式将包字节复制到剪贴板。 |
Copy/Bytes(Offset Text) | - | 以16进制转储格式将包字节复制到剪贴板。不包括文本部分。 |
Copy/ Bytes (Printable Text Only) | - | 以ASCII码格式将包字节复制到剪贴板,包括非打印字符。 |
Copy/ Bytes (HEX Stream) | - | 以16进制未分段列表数字方式将包字节复制到剪贴板, (an unpunctuated list of hex digits 应该有专有名词,有兴趣的查一下) |
Copy/ Bytes (Binary Stream) | - | 以raw binary格式将包字节复制到剪贴板。 数据在剪贴板以"MIME-type application/octet-stream"存储,该功能在GTK+1.x环境下不支持 |
Export Selected Packet Bytes... | File | 与文件菜单同名项目功能一样。允许将Raw packet 字节转换为二进制文件它 |
--- |
|
|
Decode As... | Analyze | 在两个解析之间建立或修改新关联(不知所云) |
Print... | File | 打印包 |
Show Packet in New Window | View | 在新窗口显示选中的包 |
包详情面板的弹出菜单
下表介绍了包详情列表菜单项的功能描述,及其他可以提供该功能的主菜单
项目 | 对应的主菜单 | 描述 |
Expand Subtrees | View | 展开当前选择的子树 |
Expand All | View | 展开捕捉文件的所有包的所有子树 |
Collapse All | View | 关闭包中所有已展开的子树 |
----- |
|
|
Copy/Description | - | 复制选择字段显示的文本到剪贴板 |
Copy/AS Filter | Edit | 将选择项目作为显示过滤内容复制到剪贴板 |
Copy/Bytes(Offset Hex Text) | - | 将包字节以Hexdump-like格式存储到剪贴板;类似于包列表面板中同名的命令, 但是拷贝结果仅仅是树分支中被选中部分(包字节面板中被选中字节) |
Copy/Bytes(Offset Hex) | - | 以Hexdump-linke格式保存到剪贴,不包括文本部分。类似于包列表命令, 不同之处在于此处仅拷贝树分支选中部分(包字节面板选中部分) |
COPY/Bytes (printable Text Only) | - | 以ASCII格式拷贝包字节,非打印字符除外;类似于包列表面板中同样的命令。 不同点在于此处仅拷贝选择的树分支(包字符被选择部分) |
Copy/Bytes(Hex Stream) | - | j以unpunctuated list hex digits形式保存到剪贴板,类似于包列表面板中的命令 ,不同之处在于仅复制选中子树部分(包字节面板选中部分) |
Copy/Bytes(Binary Stream) | - | 以raw binary格式拷贝到剪贴板;类似于包列表面板中的命令,不同之处在于 仅拷贝选中部分 子树(包字节面板选中部分)。数据以MIME-type“Application/octet-stream” 存储在剪贴板.该功能在GTK+1.x下不可用 |
Export Selected Packet Bytes... | File | 同文件菜单中的同名项一样。导出raw packet 字节为二进制文件。 |
--- |
|
|
Apply as Filter | analyze | 将当前选择项作为过滤内容,并应用 |
Preapare a Filter | Analyze | 将当前选择项作为过滤内容,但不立即应用 |
Follow TCP Stream | Analyze | 追踪两个节点见,被选择包所属TCP流的完整数据 |
Follow SSL Stream | Analyze | 同上 |
----- |
|
|
Wiki Protocol Page | - | 显示当前选择协议的对应WIKI网站协议参考页 |
Filter Field Reference | - | 显示当前过滤器的WEB参考 |
Protocol Preferences... | - | 如果协议字段被选中,点击该选项,打开属性对话框,选择对应协议的页面 |
----- |
|
|
Decode As... | Analyze | 更改或应用两个解析器之间的关联 |
Resolve Name... | View | 对选择的包进行名称解析,不是指所有的包 |
Go to corresponding Packet ... | Go | 跳到当前选择包的相应包。 |
浏览时过滤包
Wireshark有两种过滤语法:一种是捕捉包时使用,另一种是显示包时使用。本节介绍第二种过滤语法:显示过滤。
显示过滤可以隐藏一些你不感兴趣的包,让你可以集中注意力在你感兴趣的那些包上面。你可以用从以下几个方面选择包:
- 协议
- 预设字段
- 字段值
- 字段值比较
- 。。。以及许多
根据协议类型选择数据报,只需要在Filter框里输入你刚兴趣的协议,然后回车开始过滤。???显示了你输入tcp进行过滤后的图。
用TCP协议过滤
或许你没有注意到,上图显示的已经仅有TCP协议了(从图中可以看到1-10号包已经被隐藏)。因为包的编号是固定不变的,所以第一个包显示的编号是11。
建立显示过滤表达式
Wireshark提供了简单而强大的过滤语法,你可以用它们建立复杂的过滤表达式。你可以比较包中的值,合并表达式为多个指定表达式。本节介绍了相关操作。
显示过滤字段
包详情面板的每个字段都可以作为过滤使用。应用这些作为过滤将会仅显示包含该字段的包。例如:过滤字符串:TCP将会显示所有包含TCP协议的包。
通过"Help/Support Protocals"/帮助/协议支持菜单项访问"Display Filter Fields/显示过滤字段"可以查看完整完整的过滤字段列表。
比较值
你可以通过在许多不同的比较操作建立比较过滤。
English | C-linke | 描述及范例 |
eq | == | Equal ip.addr==10.0.0.5 |
ne | != | Not equal ip.addr!=10.0.0.5 |
gt | > | Greate than frame.pkt_len>10 |
lt | < | Less than frame.pkt_len<128 |
ge | >= | Greater than or equal to frame.pkt_len ge 0x100 |
le | <= | Equal frame.pkt_len <= 0x20 |
组合表达式
你可以用逻辑操作符将过滤表达式组合在一起使用English | C-linke | 描述和范例 |
and | && | Logical AND ip.addr==10.0.0.5 and tcp.flags.fin |
or | || | Logical OR ip.addr==10.0.0.5 or ip.addr==192.1.1.1 |
xor | ^^ | Logical XOR tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29 |
not | ! | Logical Not not llc |
[...] |
| Substring Operator Wireshark允许选择一个序列的子序列。在标签后你可以加上一对[]号,在里面包含用逗号(是不是冒号?)分离的列表范围。 eht.src[0:3] == 00:00:83 上例使用n:m格式指定一个范围。在这种情况下,n是起始位置偏移(0表示没有偏移,即是第一位,同理1表示向右偏移一位,便是第二位),m是从指定起始位置的区域长度。 eth.src[1-2] == 00:83 上例使用n-m格式一个范围。在本例中n表示起始位置偏移,m表示终止位置偏移 eth.src[:4]=00:00:83:00 上例使用:m格式,表示从起始位置到偏移偏移位置m。等价于0:m eth.src[4:]=20:20 上例使用n:格式,表示从最后位置偏移n个序列 eht.src[2] == 83 上例使用 n 形式指定一个单独的位置。在此例中中序列中的单元已经在偏移量n中指定。它等价于n:1 eth.src[0:3,102,:4,4:,2] == 00:00:83:00:83:00:00:83:00:20:20:83 Wireshark 允许你将多个分号隔开的列表组合在一起表示复合区域,如上例所示 |
常见的错误
在组合表达式中使用"!="操作符,像eth.addr,ip.addr,tcp.port,udp.port等元素可能会产生非预期效果
如果有人想用ip.addr !=1.2.3.4 表达式来排除ip地址为1.2.3.4的包,很不幸。它不会像你期待的那样。经常有人用ip.addr ==1.2.3.4 表达式来选择所有包含ip地址为1.2.3.4的包,
相反,那个表达式为真值得条件是源地址或目标地址中的任意一个不等于1.2.3.4即可。因此,那个表达式ip.addr !=1.2.3.4 可以被读作:"该包包含的ip字段值必须不为1.2.3.4"。因为一个ip数据报同含源地址和目标地址,只要两个地址有一个不为1,2,3,4表达式就为真。
接着上面的话题,如果你真想过滤捕捉文件中,ip地址包含1.2.3.4的包,正确的表达式应该是!(ip.addr==1.2.3.4)。它可以读作:"显示所有'字段名为ip.addr值存在1.2.3.4'为非真的包'",换句话说:"筛选所有字段名ip.addr的值中未出现1.2.3.4的包"
“Filter Expression/过滤表达式”对话框
当你熟悉Wireshark过滤系统,并了解你可以用那些标签进行过滤以后,你可以快速简单地输入过滤字符
但如果你是一个Wireshark新手,或者处理一些相对陌生的协议,你可能很难通过直接输入字符进行过滤。过滤表达式对话框会帮你解决这些问题
过滤表达式对话框
打开上图的对话框以后。将会显示一个按协议类型分组的树分支列表,一个关系选择框。
Field Name
从协议字段树中选择协议字段。每个可过滤协议都放在第一级。点击+号展开列表,可以获得关于那些协议的可过滤字段。
Relation
从可用关系列表中选择关系。is present是一元关系,表示如果你选择的字段存在,表达式就为真值。其它关系都为二元关系,需要附加数据(例如:一个值来匹配)来完成。
如果你从字段名列表选择一个字段,并选择一个二元关系(例如等于关系"=="),你可能需要输入值,也有可能是范围信息。
Value
在此输入合适的配置值,输入的值同样要符合你选择的field name的属性值类型(例如 字符串).
Predefined values
有些协议字段包含预设值可用,这一点跟C语言中的枚举变量类似。如果选择的协议有这样的值定义,你可以在此选择。
Range
此处作者留空了
OK
如果你已经建立好了表达式,点击OK即可创建你的过滤字符串
Cancel
你可以点击Cancle按钮不做任何修改离开Add Expression。。。对话框。
定义,保存过滤器
你可以定义过滤器,并给他们标记以便以后使用。这样可以省去回忆、重新输入某些你曾用过的复杂过滤器的时间。
定义新的过滤器或修改已经存在的过滤器有两种方法:1、在Capture 菜单选择CaptureFilters...;2、在Analyze菜单选择Display filter...。Wireshark 将会弹出如下图所示话框。
New
增加一个新的过滤器到列表中。当前输入的Filter name,Filter string值将会被使用。如果这些都为空,将会被设置为"new"(是说filtername还是说二者都是?)
Delete
删除选中的过滤器。如果没有过滤器被选中则为灰色
Filter name
修改当前选择的过滤器的名称
Filter string
修改当前选中过滤器的的内容。仅适用显示过滤:在输入时进行语法检查。
Add Expression
仅适用显示过滤:打开增加表达式对话框,辅助创建过滤表达式。
OK
仅适用显示过滤:为当前显示应用选择的过滤器,关闭当前对话框。
save
保存当前对话框设置。文件位置和格式见???
Close
关闭当前对话框。将会放弃未保存的设置。
查找包
当你捕捉到一些包以后,或者读取以前存储的包的时候,可以很容易的进行查找。从Edit菜单选择Find Packet...菜单项.Wireshark将会弹出如下所示对话框.
"Find Packet/查找包"对话框
首先你需要选择查找方式:
Display filter
在Filter:输入字段,选择查找方向,点击OK(过滤器方式)
例如:查找192.168.0.1发起的三步握手建立连接,使用如下字符:
ip.addr == 192.168.0.1 and tcp.flags.syn
显示过滤的详情
Hex Value
在包数据中搜索指定的序列
例如,使用"00:00"查找下一个包含两个空字节的包数据。
String
在包中查找字符串,可以指定多种参数
输入的查找值将会被进行语法检查。如果语法检查无误,输入框背景色会变成绿色,反之则是红色。
你可以指定查找的方向通过:
UP
向上查找包列表(包编号递减方式)
Down
向下查找包列表(包编号递增方式)
"FindNext/查找下一个"命令
适用最后一次的查找设置继续查找
"FindPrevious/查找上一个"命令
适用最后一次的设置修改查找方向,继续查找。
到指定的包
通过"Go"菜单可以很轻松跳转到指定的包
"GO Back"返回命令
使用Go back返回包历史记录,工作方式跟web浏览器的页面历史记录类似
"Go Forward /向前"命令
前进到包的历史记录,工作方式跟web浏览器的页面历史记录类似
"Go to Packet/到指定的包"对话框
输入包的编号,点击OK,跳转到指定的包(他妈的我怎么看都是jumpto,怎么成了OK?).
Go to Corresponding Packet/到对应的包"命令
如果被选择协议字段指向文件中的另一个包,该命令将会跳转到那个包。