Wireshark使用说明
一、安装wireshark:
1、在windows下安装:
Wireshark的安装需要WinPcap,但是在Wireshark的安装包里一般含有WinPcap,所以不需要单独下载安装它。
除了普通的安装之外,还有几个组件供挑选安装。
选择组件(注意:GTK1和GTK2无法同时安装):
WiresharkGTK1-Wireshark:一个GUI网络分析工具
WiresharkGTK2-Wireshark:一个GUI网络分析工具(建议使用GTK2GUI模组工具)
GTK-Wimp:GTK2窗口模拟(看起来感觉像原生windows32程序,推荐使用)
TSshark:一个命令行的网络分析工具
注意:如果使用GTK2的GUI界面遇到问题可以尝试GTK1,在Windows下256色(8bit)显示模式无法运行GTK2.但是某些高级分析统计功能在GTK1下可能无法实现。
插件/扩展(Wireshark,TShark分析引擎):
DissectorPlugins:带有扩展分析的插件
TreeStatisticsPlugins-树状统计插件:统计工具扩展
Mate-MetaAnalysisandTracingEngine(experimental):可配置的显示过滤引擎,参考http://wiki.wireshark.org/Mate.
SNMPMIBs:SNMP,MIBS的详细分析。
2、在LINUX下安装:
(1)在编译或者安装二进制发行版之前,您必须确定已经安装如下包:
GTK+:TheGIMPToolKit.
Glib:可以从www.gtk.org获得。
Libpcap:Wireshark用来捕捉包的工具,您可以从www.tcpdump.org获得。
根据您操作系统的不同,您或许能够安装二进制包,如RPMs.或许您需要获得源文件并编译它。
如果您已经下载了GTK+源文件,例?1“从源文件编译GTK+”提供的指令对您编译有所帮助。
例?1.?从源文件编译GTK+
#gunzip-dcgtk+-1.2.10.tar.gz|tarxvf–
#./configure
#makeinstall
注意您可能需要修改例1中提供的版本号成对应您下载的GTK+版本。如果GTK的目录发生变更,您同样需要修改它。tarxvf显示您需要修改的目录。如果您使用Linux,或者安装了GUNtar,您可以使用tarzxvfgtk+-1.2.10.tar.gz命令。同样也可能使用gunzip–c或者gzcat如果您在windows中下载了gtk+或者其他文件。您的文件可能名称为:gtk+-1_2_8_tar.gz–
#cdlibpcap-0.9.4
#./configure
#make
#makeinstall
注意Libpcap的目录需要根据您的版本进行修改。tarxvf命令显示您解压缩的目录。注意如果您使用RedHat6.2之后的版本,需要的RMPs包可能已经变化。您需要使用正确的RMPs包。注意使用管道命令行gzip–dcWireshark-0.99.5-tar.gz|tarxvf同样可以如果您在Windows下下载了Wireshark,你会发现文件名中的那些点变成了下划线。
常见需要注意的地方:
A.必须拥有root/Administrator特权才能开始捕捉
B.必须选择正确的网络接口捕捉数据。
2、开始捕捉
可以使用以下任一方式开始捕捉包
方式一:使用打开捕捉接口对话框,浏览可用的本地网络接口,选择需要进行捕捉的接口并启动捕捉
方式二:使用"捕捉选项"按钮启动对话框开始捕捉,如下图
如果前次捕捉时的设置和现在的要求一样,可以直接点击"开始捕捉"按钮或者是菜单项立即开始本次捕捉。
方式三:如果已经知道捕捉接口的名称,可以使用如下命令从命令行开始捕捉:
wireshark-ieth0-k
上述命令会从eht0接口开始捕捉。
捕捉时,会出现下面的捕捉信息对话框:
上述对话框会向你显示捕捉到包的数目,以及捕捉持续时间。捕获前选定了要统计的协议,在捕获过程中无法对其作出更改(增加或取消某些要统计的协议)。
提示这个对话框可以被隐藏,在的捕捉选项对话框设置"Hidecaptureinfodialogbox"即可。
3、停止捕捉
运行中的捕捉线程可以用下列方法停止:
方法一:使用捕捉信息对话框上的"stop"按钮停止。
注意捕捉信息对话框有可能被隐藏,如果你选择了"Hidecaptureinfodialog"Stop"
方法三:使用工具栏项"Stop"
方法四:使用快捷键:Ctrl+E
注意:如果设置了触发停止的条件,捕捉达到条件时会自动停止。
4、重新启动捕捉
运行中的捕捉进程可以被重新启动。这将会移出上次捕捉的所有包。如果你捕捉到一些你不感兴趣的包,你不想保留它,这个功能十分有用。
重新启动是一项方便的功能,类似于停止捕捉后,在很短的时间内立即开始捕捉。以下两种方式可以实现重新启动捕捉:
方法一:使用菜单项"Capture/Restart"
方法二:使用工具栏项"Restart"
方法三:使用快捷键Ctrl+R
5、捕捉时过滤:
捕捉过滤的形式为:和取值(and/or)进行进行基本单元连接,加上可选的,高有限级的not:
[not]primitive[and|or[not]primitive...]
在下图所示处输入:
例?1.?捕捉来自或指向主机10.0.0.5的telnet协议:tcpport23andhost10.0.0.5
例?2.?捕捉所有不是来自10.0.0.5的telnet通信:tcpport23andnotsrchost10.0.0.5
相关的捕捉时过滤语法:
一个基本单元通常是下面中的一个
(1)[src|dst]host
此基本单元允许你过滤主机ip地址或名称。你可以优先指定src|dst关键词来指定你关注的是源地址还是目标地址。如果未指定,则指定的地址出现在源地址或目标地址中的包会被抓取。
(2)ether[src|dst]host
此单元允许你过滤主机以太网地址。你可以优先指定关键词src|dst在关键词ether和host之间,来确定你关注的是源地址还是目标地址。如果未指定,同上。
(3)gatewayhost
过滤通过指定host作为网关的包。这就是指那些以太网源地址或目标地址是host,但源ip地址和目标ip地址都不是host的包
(4)[src|dst]net[{mask}|{len}]
通过网络号进行过滤。你可以选择优先指定src|dst来确定你感兴趣的是源网络还是目标网络。如果两个都没指定。指定网络出现在源还是目标网络的都会被选择。另外,你可以选择子网掩码或者CIDR(无类别域形式)。
(5)[tcp|udp][src|dst]port 过滤tcp,udp及端口号。可以使用src|dst和tcp|udp关键词来确定来自源还是目标,tcp协议还是udp协议。tcp|udp必须出现在src|dst之前。
(6)less|greater
选择长度符合要求的包。(大于等于或小于等于)
(7)ip|etherproto
选择有指定的协议在以太网层或是ip层的包
(8)ether|ipbroadcast|multicast
选择以太网/ip层的广播或多播
(9)relop
创建一个复杂过滤表达式,来选择包的字节或字节范围符合要求的包。
6、?保存捕捉包
你可以通过File->SaveAs...菜单保存捕捉文件。在保存时可以选择保存哪些包,以什么格式保存:
Windows下的界面:
LINUX下的界面:
通过这些对话框,你可以执行如下操作:
(1)输入你指定的文件名。
(2)选择保存的目录
(3)选择保存包的范围
(4)通过点击"Filetype/文件类型"下拉列表指定保存文件的格式。
(5)点击"Save/OK"按钮保存。如果保存时遇到问题,会出现错误提示。确认那个错误提示以后,你可以重试。
(6)点击"Cancel"按钮退出而不保存捕捉包。
7、输出格式
可以将Wireshark捕捉到的包保存为其原生格式文件(libpcap),也可以保存为其他格式供其他工具进行读取分析。
Wireshark可以保存为如下格式:
libpcap,tcpdumpandvariousothertoolsusingtcpdump''scaptureformat(.pcap,.cap,.dmp)
Accellent5Views(.5vw)
HP-UX''snettl(.TRC0,.TRC1)
MicrosoftNetworkMonitor-NetMon(.cap)
NetworkAssociatesSniffer-DOS(.cap,.enc,.trc,fdc,.syc)
NetworkAssociatesSniffer-Windows(.cap)
NetworkInstrumentsObserverversion9(.bfr)
NovellLANalyzer(.tr1)
Sunsnoop(.snoop,.cap)
VisualNetworksVisualUpTimetraffic(.)
三、浏览捕捉的包
在捕捉完成之后,或者打开先前保存的包文件之后,通过点击包列表面版中的包,可以在包详情面板看到关于这个包树状结构以及字节面版
通过点击左侧"+"标记,可以展开树状视图的任意部分。下面是一个例子:
当Wireshark正在捕捉时,也可以进行同样的选择。(前提是在捕捉选项对话框选择了实时更新列表(updatelistofpacketinrealtime))
另外,还可以使用分离的窗口浏览单独的数据包,如下图,想要这样做,只需要在选中包列表面版中您感兴趣的包,菜单View->ShowPacketinNewWindows。这样我们可以很轻松地比较两个或多个包。
或者在包列表面板中右键单击所选的包,选择ShowPacketinNewWindow:
又或者在包列表面板中双击所选择的包:
四、浏览时过滤包
Wireshark有两种过滤语法:一种是捕捉包时使用,另一种是显示包时使用。之前在“捕捉时过滤”里已经介绍过第一种过滤语法了,这里将介绍第二种:显示过滤。
显示过滤可以隐藏一些你不感兴趣的包,让你可以集中注意力在你感兴趣的那些包上面。可以从以下几个方面选择包:
协议
预设字段
字段值
字段值比较
……
根据协议类型选择数据报,只需要在Filter框里输入你感兴趣的协议,然后回车开始过滤。下面显示了输入tcp进行过滤后的图。
显然,上图显示的已经仅有TCP协议了(从图中可以看到1-10号包已经被隐藏)。因为包的编号是固定不变的,所以第一个包显示的编号是11。
注意使用过滤时,所有的包依然保留在捕捉文件里。显示过滤只是更改捕捉文件的显示方式而非内容。注意点击Clear可以移除过滤
Wireshark提供了简单而强大的过滤语法,可以用它们建立复杂的过滤表达式。你可以比较包中的值,合并表达式为多个指定表达式。
提示:可以在WiresharkWikiDisplay页找到发现大量的显示过滤范例。http://wiki.wireshark.org/DisplayFilters.
(1)显示过滤字段
包详情面板的每个字段都可以作为过滤使用。应用这些作为过滤将会仅显示包含该字段的包。例如:过滤字符串TCP,将会显示所有包含TCP协议的包。
包详情面板:
通过"Help/SupportProtocals"/帮助/协议支持菜单项访问"DisplayFilterFields/显示过滤字段"可以查看完整的过滤字段列表。
(2)?比较值
可以通过在许多不同的比较操作建立比较过滤。详见下表。
提示:可以使用下表中的英语和比较符(c-link)项达到同样的效果,它们也可以混合使用。English C-linke 描述及范例 eq == Equal
ip.addr==10.0.0.5 ne != Notequal
ip.addr!=10.0.0.5 gt > Greatethan
frame.pkt_len>10 lt < Lessthan
frame.pkt_len<128 ge >= Greaterthanorequalto
frame.pkt_lenge0x100 le <= Equal
frame.pkt_len<=0x20 English C-linke 描述和范例 and && LogicalAND
ip.addr==10.0.0.5andtcp.flags.fin or || LogicalOR
ip.addr==10.0.0.5orip.addr==192.1.1.1 xor ^^ LogicalXOR
tr.dst[0:3]==0.6.29xortr.src[0:3]==0.6.29 not ! LogicalNot
notllc [...] ? SubstringOperator
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等元素可能会产生非预期效果
打开上图的对话框以后。将会显示一个按协议类型分组的树分支列表,一个关系选择框。
FieldName:
从协议字段树中选择协议字段。每个可过滤协议都放在第一级。点击+号展开列表,可以获得关于那些协议的可过滤字段。
Relation:
从可用关系列表中选择关系。ispresent是一元关系,表示如果你选择的字段存在,表达式就为真值。其它关系都为二元关系,需要附加数据(例如:一个值来匹配)来完成。
如果你从字段名列表选择一个字段,并选择一个二元关系(例如等于关系"=="),你可能需要输入值,也有可能是范围信息。
Value:
在此输入合适的配置值,输入的值同样要符合你选择的fieldname的属性值类型(例如字符串).
Predefinedvalues:
有些协议字段包含预设值可用,这一点跟C语言中的枚举变量类似。如果选择的协议有这样的值定义,你可以在此选择。
Range:
此处作者留空了
OK:
如果你已经建立好了表达式,点击OK即可创建你的过滤字符串
Cancel:
你可以点击Cancle按钮不做任何修改离开AddExpression。。。对话框。
(6)定义、保存过滤器
你可以定义过滤器,并给他们标记以便以后使用。这样可以省去回忆、重新输入某些你曾用过的复杂过滤器的时间。
定义新的过滤器或修改已经存在的过滤器有两种方法:
方法一:在Capture菜单选择CaptureFilters...;
方法二:在Analyze菜单选择Displayfilter...。Wireshark将会弹出如下图所示话框。
注意:因为捕捉和显示滤镜的设定义和保存方式几乎完全一样所以这里放在一起讲,二者之间的不同点会做标记必须用Save来保存你的过滤器,OK或者Apply不会保存过滤器。关闭wireshark时会随之消失过滤器名称仅用在此处为了区分方便而已,没有其他用处。可以将多个过滤器使用同一个名称,但这样会很不方便5)“FilterExpression/过滤表达式”对话框
OK:
仅适用显示过滤,为当前显示应用选择的过滤器,关闭当前对话框。
Save:
保存当前对话框设置。
Close:
关闭当前对话框。将会放弃未保存的设置。
五、?查找包
当你捕捉到一些包以后,或者读取以前存储的包的时候,可以很容易的进行查找。从Edit菜单选择FindPacket...菜单项,Wireshark将会弹出下图所示对话框.
首先你需要选择查找方式:
Displayfilter:在Filter:输入字段,选择查找方向,点击OK(过滤器方式)
例如:查找192.168.0.1发起的三步握手建立连接,使用如下字符:
ip.addr==192.168.0.1andtcp.flags.syn
HexValue:在包数据中搜索指定的序列。
例如:使用"00:00"查找下一个包含两个空字节的包数据。
String:在包中查找字符串,可以指定多种参数。
提示:输入的查找值将会被进行语法检查。如果语法检查无误,输入框背景色会变成绿色,反之则是红色。
你可以指定查找的方向通过:
UP:向上查找包列表(包编号递减方式)
Down:向下查找包列表(包编号递增方式)
Edit->FindNext/查找下一个:适用最后一次的查找设置继续查找
Edit->FindPrevious/查找上一个:适用最后一次的设置修改查找方向,继续查找
六、标记包
可以在包列表面板对包进行标记。不管原来设置的颜色是怎样的,被标记的包的背景色将变为黑色。标记包有助于在分析大的包文件时进行查找。
标记方法:单击右键,选择MarkPacket:
警告:包标记并没有存储在捕捉文件中或任何其他地方,关闭文件后,所有标记将会丢失
流的内容出现的顺序同他们在网络中出现的顺序一致。从A到B的通信标记为红色,从B到A的通信标记为蓝色。当然,如果你喜欢的话你可以从"Edit/Preferences"菜单项的"Colores"修改颜色。
非打印字符将会被显示为圆点。
注意:在捕捉过程中,TCP流不能实时更新。想得到最近的内容需要重新打开对话框。
可以在此对话框执行如下操作:
SaveAs:以当前选择格式保存流数据。
Print:以当前选择格式打印流数据。
Direction:选择流的显示方向("Entireconversation","datafromAtoBonly"or"datafromBtoAonly").
Filteroutthisstream:应用一个显示过滤,在显示中排除当前选择的TCP流。
Close:关闭当前对话框,移除对当前显示过滤的影响。
可以用以下格式浏览流数据:
AsCII:在此视图下你可以以ASCII方式查看数据。适合基于ASCII的协议用,例如HTTP
EBCDIC:是IBM公司的字符二进制编码标准。
HEXDump.:允许你查看所有数据,可能会占用大量屏幕空间。适合显示二进制协议。
CArrays.:允许将流数据导入自己的C语言程序。
RAW:允许载入原始数据到其他应用程序做进一步分析。显示类似于ASCII设置。但“saveAs”将会保存为二进制文件。
八、时间戳
在包被捕捉时,每个包在进入时都被加上时间戳,这个时间戳将会保存在捕捉文件中,所以它们也可以在以后分析时使用。
那么,时间戳是从哪里来的呢?是捕捉的时候产生的。Wireshark从libpcap(WinPcap)libraray(库)中获得时间戳。而libpcap(winpcap)又是从操作系统内核获得的时间。如果捕捉数据是从捕捉文件载入的,很显然Wireshark从文件中获得时间戳数据。
1、?Wireshark内置
Wireshak内置的格式使用的时间戳格式由日期(从1.1.1970开始)和时间(从凌晨起,纳秒(10亿分之一秒)为单位)组成。你可以调整Wireshark在包列表的时间戳显示方式。感兴趣可研究一下"View"菜单的"TimeDisplayFormat"项。
当读取或写入捕捉文件时,Wireshark按需要在内置格式和其他捕捉文件格式间进行时间戳转换。
捕捉时,Wireshark使用libpcap(WinPcap)捕捉库(支持纳秒精度)。除非你在专用的捕捉硬件上进行捕捉,否则一般这样的精度已经足够了。
2、?捕捉文件格式
Wireshark支持的捕捉文件格式都带有时间戳。不同的捕捉文件格式的时间戳精度有很大不同,从秒"0"到纳秒"0.123456789"都有。大多数格式捕捉文件存储的时间戳都是固定精度的,些捕捉文件格式甚至存储了时间戳精度本身(可能是出于方便)。
大多数被Wireshark(和/或更多其他工具)使用的libpcap捕捉文件格式都仅支持固定的百万分之一固定精度"0.123456"。
注意:写入数据到一个实际支持精度比你写入数据精度低的格式文件中,可能会导致数据丢失。例如:如果你载入一个纳秒精度的捕捉文件,然后将其存储为libpcap文件(百万分之一秒精度)Wireshark很明显会将时间精度调整为百万分之一秒。
1、?什么是合并包
网络协议经常需要传输较大的数据块,在传输时,底层协议可能不支持这样大的数据块(比如网络包大小的限制),或者是像TCP一样的流数据,TCP流本身是完全不知道数据分块情况的。
在这种情况下,网络协议必须确定数据块分段的边界,并(如果有必要)将数据块分割为多个包。很明显,在接受端也需要有找到数据块分段边界的机制。
2、?如何用Wireshark合并包
对那些可以被Wireshark识别的协议,Wireshark通常处理过程为:查找、解码、显示数据块。Wireshark会尝试查找数据块对应的包,在"PacketBytes"面板的附加页面显示合并以后的数据。感兴趣可研究一下"View"菜单的"PacketBytes"面板。
注意:
1.合并可能发生在多个协议层,所以在"PacketBytes"面板可能会见到多个附加页选项卡 |
|