wireshark使用方法.docx
《wireshark使用方法.docx》由会员分享,可在线阅读,更多相关《wireshark使用方法.docx(20页珍藏版)》请在冰点文库上搜索。
![wireshark使用方法.docx](https://file1.bingdoc.com/fileroot1/2023-5/18/7b94e15c-90df-46c2-8308-9b0a27dff461/7b94e15c-90df-46c2-8308-9b0a27dff4611.gif)
wireshark使用方法
1.目的
在ADSL、AG及其他产品的日常排障过程中经常需要现场进行抓包配合,本文档提供了Wireshark的常用操作指南。
2.范围
AG、ADSL现场工程师。
3.Wireshark安装
作为Ethereal的替代产品,Wireshark()是一款优秀且免费的抓包分析软件,可到Internet自行下载安装。
Wireshark的安装软件包由Wireshark-setup和WinPcap等2个安装文件组成。
4.Wireshark使用
抓包
点击菜单Capture->Options…,打开CaptureOptions窗口。
在Interface中选择网络接口;在CaptureFilter中输入需要过滤的协议(如过滤megaco协议,输入udpport2944);在CaptureFile(s)的File中输入要保存的抓包文件名,如要将抓包分文件保存,则在Usemultiplefiles中选择保存文件的分割机制,如下图每5M就保存一个文件;如需要实时显示抓包结果并让抓包结果自动滚屏,则在DisplayOptions中选中Updatelistofpacketsinrealtime和Automaticscrollinginlivecapture。
Interface:
这项用于指定截包的网卡。
Link-layerheadertype:
指定链路层包的类型,一般使用默认值。
Buffersize(nmegabyte(s)):
用于定义Ethereal用于截包的缓冲,当缓冲写满后,就将截的数据写道磁盘上。
如果遇到ethereal丢包现象,将该缓冲尽量增大。
Capturepacketsinpromiscuousmode:
截包时,Ethereal将网口置于混杂模式。
如果没有配置这项,Ethereal只能截取该PC发送和接收的包(而不是同一LAN上的所有包)。
Limiteachpackettonbytes:
定义Ethereal截取包的最大数据数,大于这个值的数据包将被丢掉。
默认为65535。
点击Start启动抓包。
如果开启了自动保存文件机制,请确认自动存盘的前3个文件,确保机制生效。
并定期检查磁盘空间,以防磁盘空间溢出。
如果用Dell笔记本抓包时发现无法抓到带VLANTag的包,请修改注册表,修改方法参见附录。
常用抓包过滤命令
为防止抓包文件过大而影响分析效果,可在抓包阶段就设置抓包过滤(在CaptureFilter中输入需要过滤的协议或命令)。
现将常用抓包过滤命令总结如下:
抓包过滤要求
抓包过滤命令
MAC地址为00:
18:
8b:
ba:
86:
d6的报文
etherhost00:
18:
8b:
ba:
86:
d6
IP地址为的报文
host
id为100的报文
vlan100
ARP报文
arp
PPPoE报文
pppoed
DHCP报文
udpport67orudpport68
IGMP报文
ipmulticastandnotudp
megaco信令报文(通常端口为2944)
udpport2944
sip信令报文(通常端口为5060)
udpport5060
SCTP报文(通常端口为9900)
udpport9900
Ethereal截包过滤条件,通过and和or,将一系列的primitive表达式连接在一起,有时可在primitive表达式前用not。
[not]primitive[and|or[not]primitive…]
例一:
tcpport23andhost。
这个例子表示只截取发给主机的telnet数据包或主机发出的telnet数据包。
例二:
tcpport23andnothost。
这个例子表示截取所有的telnet数据包,除了主机收发的telnet数据包。
Primitive表达式如下:
[src|dst]host通过主机IP地址/名称过滤截取的数据包。
也可以在前面加关键字[src|dst]来限制是目的或源地址。
ether[src|dst]host同上,只是通过MAC地址来过滤。
gatewayhost截取将该主机作为网关的包,即MAC地址是主机的地址,而包的源和目的IP都不是该主机的IP
[src|dst]net[{mask}|{len}]
[tcp|udp][src|dst]port通过TCP/UDP的端口过滤
less|greater截取数据保小于、等于指定的大小;或大于、等于指定的大小。
ip|etherprotoIP/Ethernet层的指定协议。
ether|ipbroadcast|multicast截取ether/ip的广播包。
relop允许建立一个更复杂的表达式,可以通过它来选取数据包的字节或字节范围来过滤。
分析
为便于分析,可在查看抓包文件时设置过滤。
ADSL
如检查PC(MAC地址为00:
06:
5b:
e1:
96:
e9)的PPPoE拨号过程,可在Filter中输入==00:
06:
5b:
e1:
96:
e9and(pppoedorppp)。
一旦截取数据包后,或打开以前截取的数据包文件,显示如图2。
显示有三个视图分区:
“PacketList”、“PacketDetails”、“Packetbytes”。
“PacketList”用于显示所数据包,如果这是有显示过滤条件,显示的是满足该条件的所有包。
“PacketDetails”用于显示在“PacketList”视图中选定的数据包的详细信息。
“PacketBytes”以十六进制方式显示“PacketList”视图中选定的数据包的信息。
AG
如检查AG中2个端口(如tdm/1与tdm/2)之间的通话消息,则可在Filter输入megaco先进行信令过滤。
重点查看AG对软交换chooseoneadd消息的reply,以明确AG为这2个端口分配的context号和localrtp端口号。
如上图,tdm/1的context号为310,localrtp端口号为40034;tdm/2的context号为275,localrtp端口号为40036。
如需过滤这两个端口的信令,则在Filter中输入=="tdm/1"or=="tdm/2"or==310or==275。
除了过滤这2个端口的信令,如还需要过滤RTP,则在Filter中输入=="tdm/1"or=="tdm/2"or==310or==275or==40034or==40036。
点击菜单Statistics->RTP->Showallstreams,打开RTPStreams窗口。
其中列出抓包文件中所有的RTPStream。
选中要查看的stream,再点击Analyze,打开RTPStreamAnalysis窗口,进一步检查该stream的丢包率,jitter等。
点击Savepayload…则可将该RTPStream保存为声音文件。
(WiresharkVersion版本将RTP包导成声音文件时有bug,建议尝试用Ethereal完成此操作。
)
显示过滤表达式
Ethereal提供了简单但是很强大的过滤语言,通过它我们可以建立复杂的显示过滤表达式。
我们可以比较数据包的数据值,也可以将多个表达式合成一个更复杂的表达式。
接下来将详细介绍。
显示过滤域(Displayfilterfields)
在“Packetdetails”视图中的每一个域能够用作一个过滤字符串(filterstring),这样,就只显示存在该域的数据包。
例如:
过滤字符串:
tcp,这就只显示所有tcp协议的包。
比较表达式
我们可以创建一个比较值的显示过滤条件,通过使用不同的比较操作符。
它们显示在表1
英语(English)
类C(C-like)
描述和举例(DescriptionandExample)
eq
==
等于==
不等于!
=
大于>10
lt
<
小于<10
ge
>=
大于或等于ge0x100
le
<=
小于或等于<=0x20
所有的域(Field)都是有类型,见表2
类型
举例
Unsignedinteger(8-bit,16bit,24bit,32bit)
无符号整型可以表示为十进制、八进制、十六进制。
下面的表达式是等同的。
le1500
le02734
le0x436
Signedinteger(8-bit,16-bit,24-bit,32-bit)
Boolean
Ethernetaddress(6bytes)
==
address
==
address
IPXnetworknumber
String(text)
Double-precisionfloatingpointnumber
我们经常使用这样的一个过滤条件:
=,它将只显示包含ip地址的所有包。
我们理所当然的认为!
=的过滤条件将不会显示ip地址为的所有包。
其实不然。
它说表达的意思为:
“数据包有一个的域值不等于(thepacketcontainsafieldnamedwithavaluedifferentfrom如果我们想过滤所有包含ip地址为的数据包,我们必须将表达式写为:
!
==。
组合表达式
通过逻辑操作符,我们可以组合过滤条件表达式。
逻辑操作符如表3
英语(Englishi)
类C(C-like)
描述和举例(Descriptionandexample)
And
&&
LogicalAND==and
OR==or==
XOR[0:
3]==xor[0:
3]==Tr(tokenringMAC)
Not
!
LogicalNOTNotllc(Logical-linkcontrolt)
[…]
SubstringOperator
Ethereal允许我们选取一个子序列。
下面例子中的eth=00:
:
00:
20:
20
[0:
3]==00:
00:
83
上面的例子用了n:
m格式定义一个范围,n表示开始的位置,m表示这个范围的长度。
[1-2]==00:
83
上面的例子用了n-m格式定义一个范围,n表示开始的位置,m表示结束的位置。
[:
4]==00:
00:
83:
00
上面的例子用了:
m格式定义一个范围,等价为0:
m。
[4:
]==20:
20
上面的例子用了m:
格式定义一个范围,表示从eth序列位置m到其结束的子序列。
[2]==83
上面的例子用n的格式表示一个范围。
这个例子表示在n位置的值。
[0:
3,1-2,:
4,4:
,2]==00:
00:
83:
00:
83:
00:
00:
83:
00:
20:
20:
83
Ethereal允许我们将各种独立的子集组合成另外一个独立的范围集,如上例。
“FilterExpression”对话框
当我们很熟练的使用ethereal的过滤系统,很容易就写出一个过滤表达式。
但如果是一ethereal初学者或者对协议不是很熟悉,这就比较困难。
我们这时可以通过“FilterExpression”对话框来写过滤条件。
如图4
“FilterExpression”对话框:
树形域名(Fieldname)列表(协议排序);关系运算符(relation)选择列表。
FiledName:
从协议域名树中选择一个协议域名。
每一个协议位于最上部,并带有可设为过滤条件的域。
通过点击协议名称后的“+”,我们可以看到一系列的可设为过滤条件的域。
Relation:
选择一个关系运算符。
“ispresent”是一元(unary)关系运算符。
如果被选的域名存在数据包中,就是true;其它的关系运算符是二元的(binary),还需要一个数据来结束这个表达式(如,需要一个值(Value)来配合)。
Value:
我们可以在“Value”文本框中输入合适的值。
注意数据类型应该与域名(fieldname)匹配。
Range:
相当于SubString运算符[]。
时间显示格式
当我们截包时,ethereal给每一个数据包一个时间戳(timestamped)。
当我们显示数据包时,我们可以设定时间戳的显示形式。
如图5。
TimeofDay
DateandTimeofDay
SecondsSinceBeginningofCapture
SecondsSincePreviousPacket
过滤成248协议保存文件
如果只需要抓取H248信令,点击Capture选择Option出现如下示图:
图6CaptureOption
点击CaptureFilter出现下面示图:
图7CaptureFilter
选择“New”
在下面Filtername里输入megaco,在Filterstring里输入:
udpport2944andport2944(megaco的过滤条件)
图8设置megaco的过滤条件
点击OK就创建好了过滤megaco的规则,这样直接就可以抓包,只会抓到H248的信令消息。
信令过滤与保存
由于同一MG下仍然可能有多个用户在同时使用,为了显示我们关注的用户,可以在察看时进行条件过滤,例如:
==USER001||==RTP000
由于在抓包软件中察看信令不大方便,还可以把信令导出为文本格式,如下图;
需要注意的是,抓包软件不可能完全智能,过滤时有可能滤掉一些东西,例如某些报错的响应之类,所以应针对具体故障现象结合原始报文来看。
丢包与网络抖动
利用抓包软件的分析功能,可以比较容易的看出媒体流是否有丢包,如下图,在RTP菜单中,点击“ShowAllStreams”即可看到丢包。
对于较小的丢包,可以在两端配置冗余来规避。
但根本上应排查网络问题。
图9查看丢包
类似的,RTP菜单?
“StreamAnalysis”即可看到网络时延是否稳定;
图10查看网络时延
这里所说的网络抖动在WireShark中可以通过Delta的值来衡量,Delta是相邻两个媒体包之间的间隔值。
因为网关发送媒体包时的打包间隔是固定的,在没有网络抖动的情况下,接收侧网关收到的媒体流的Delta也应该是一个定值。
当有网络抖动时,Delta的值会随着网络抖动而变化。
媒体流还原
对捕获的报文除了分析协议运作外,还可以还原成音频流进行问题判断。
如果打开报文看到的媒体流类型是UDP,可以右击任意UDP报文,选“DecodeAs”—端口选“Both”,类型选RTP,即可解码为RTP流。
然后在RTP菜单(Statistics或Telephony菜单下)中,选择”showAllStreams”,在弹出的窗口中选中其中某次媒体流交互(根据交互的IP地址来选),点”Analyze”分析,对分析的结果可以”SavePayload”保存为.au等音频格式进行播放。
也可以保存为raw(.pcm)格式用AdobeAudition软件进行dtmf/传真/modem信号分析。
图11媒体流还原
对于传真,点击菜单Statistics->VoIPCalls检查的消息流程。
对于2833,点击菜单Edit->Preferences…,根据AG中2833配置的payloadtype修改Wireshark中的RTPEvent设置,然后再检查抓包中对应的2833包。
对于RFC2198RTP冗余,点击菜单Edit->Preferences…,根据AG中RTP冗余配置的payloadtype修改Wireshark中的RTP设置,然后再检查抓包中对应的RTP包。
(Ethereal不支持该Feature。
)
保存
点击菜单File->Saveas…,保存抓包文件。
可点击Displayed对只在Wireshark窗口中被过滤显示的包进行保存。
附录
如果Dell笔记本无法抓取带VLANTag的包,请按如下步骤修改注册表。
1.确保网卡版本在以上。
如果网卡版本低于,需要先将网卡驱动升版,请到下载更新的驱动程序。
2.运行注册表编辑程序regedit。
3.在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet下搜索TxCoalescingTicks,并确保该组为唯一的注册表项组。
4.在该注册表项组内右键创建类型为REG_SZ,名称为PreserveVlanInfoInRxPacket的注册表项,并将其值设置为1。
5.重启Windows确保设置生效。
文件结束
Endoffile