Wireshark是网络包分析工具,可以捕获多种网络接口类型的包,甚至包括无线局域网接口网络。包分析工具的主要作用是尝试分析捕获到的数据包,并尝试显示数据包尽可能详细的信息。
Wireshark是开源软件项目,用GPL(General Public License)协议发行。可以免费在任意数量的机器上使用,不用担心授权和付费问题,所有的源代码在GPL框架下都可以免费使用。因为以上原因,人们可以很容易在Wireshark上添加新的协议,或者将其作为插件整合到自己的程序里,这种应用十分广泛。
FTP下载:
ftp://192.168.3.222/测试软件/Wireshark-win32-1.11.2.1339076 454 .exe
官方网站:
wireshark官方网站
怕麻烦或者不太方便的同学们也不用怕,笔者已经下载好了打包上传到CSDN(附赠网络测试培训文档),点击链接下载即可:
笔者下载包(附赠网络测试培训文档)
(注:安装Wireshark之前必须安装WinPcap,因为Wireshark只是一个显示工具,真正实现抓包的软件是WinPcap。笔者上传的安装包包含WinPcap,所以不需要单独下载安装。)
注:Wireshark找不到网卡怎么办?
第一种方法:
在安全模式下启动电脑,将C:\WINDOWS\System32\drivers下的nvmini.sys删除,新建一个文本文件,命名为nvmini.sys,并将属性改为只读。nvmini.sys是一个系统驱动文件,容易感染病毒会导致Wireshark找不到网卡。退出安全模式,重新启动电脑即可。
第二种方法:
命令行执行 net start npf,如果无法打开,我的电脑->管理->设备管理器,单击查看-显示隐藏的设备,然后找到NetGroup Packet Filter Driver将驱动程序类型设为系统 ,然后重启电脑。再start一遍。(网上有资料说能看到NetGroup Packet Filter Driver是表示中毒了,按照此方法排查过可能中毒的文件夹,没找到病毒)
选择菜单项Capture->Interfaces,或点击“工具栏”左边第一个按钮,如图19。可以选择可用网络接口,点击“Start”按钮开始抓包,如图
选择菜单项Capture->Options,或点击“工具栏”左边第二个按钮,弹出Capture Options窗口,可以对抓包规则进行详细设定,如图
设置网卡是否为混杂捕获模式(Capture packets in promiscuous mode)
在普通模式下,Wireshark捕获满足以下条件的包:含本网卡地址单播包、具有多播地址且与本网卡地址配置相吻合的数据包、广播包,其他的包一律丢弃。
在混杂模式下,Wireshark除捕获上述类型的数据包外,接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。
菜单EditFind Packet,弹出查找数据包对话框,如图22。在对话框中输入要查找包的关键字或表达式就可以了,可以选择是针对过滤的包进行查找还是通过16进制值进行查找,或是通过字符串进行查找;查找到目标包以后可以通过ctrl+n组合键继续查找下一个;ctrl+b查找上一个。
常见错误:
在组合表达式中使用"!="操作符,像eth.addr,ip.addr,tcp.port,udp.port等元素可能会产生非预期效果。例如要构造表达式来排除ip地址为1.2.3.4的数据包,正确的表达式应该是 !(ip.addr == 1.2.3.4)而不是ip.addr != 1.2.3.4。
在数据包列表窗口中选择所需要的数据包,右键菜单选择Apply as Filter->selected,可以以选中的数据包作为过滤器,选择需要的数据包,如图
另外,也可以构建过滤表达式,来过滤那些不感兴趣的数据包。Wireshark提供了简单而强大的过滤语法,可以用它们建立复杂的过滤表达式。数据包列表窗口的每个字段都可以作为比较值,通过在许多不同的比较操作建立比较过滤。应用这些作为过滤将会仅显示包含该字段的包。例如:过滤字符串:TCP,将会显示所有包含TCP协议的包。
名称 | 符号 | 范例 |
---|---|---|
相等 | == | ip.addr==10.0.0.5 |
不相等 | != | ip.addr!=10.0.0.5 |
包长度大于 | > | frame.pkt_len>10 |
包长度小于 | < | frame.pkt_len<128 |
包长度大于等于 | >= | frame.pkt_len ge 0x100 |
包长度小于等于 | <= | frame.pkt_len <= 0x20 |
名称 | 符号 | 范例 |
---|---|---|
与 | && | ip.src192.168.0.0/16 and ip.dst192.168.0.0/16 |
或 | l l | ip.addr==10.0.0.5 or icmp |
非 | ! | not tcp |
为了方便查找与操作,可以将感兴趣的包做上标记以便迅速找到,选中某个包,然后点击右键菜单,选择“Mark packet”就可以了,如图
有时候需要将多个捕获文件合并到一起。例如:如果对多个接口同时进行捕获,合并就非常有用。可以使用如下方法合并捕获文件:
File->Merge,弹出合并捕获文件对话框,如图25。通过该对话框可以选择需要合并的文件,与当前打开的数据包文件进行合并。
可以通过以下三种方式合并:将数据包插入已存在文件前、按时间顺序合并文件、追加包到当前文件。
使用拖放功能,将多个文件同时拖放到主窗口。Wireshark会创建一个临时文件尝试对拖放的文件按时间顺序进行合并。如果只拖放一个文件,Wireshark只是简单地替换已经打开的文件。
file->Export,弹出导出数据包对话框,如图26。在该对话框中,可以选择要导出文件存放的路径。导出与保存的区别:用户通过导出可以自主选择要导出哪个数据包,而保存是保存当前软件捕获的所有数据包,不能对保存的具体数据包进行选择。有三种导出方式:导出所有的数据包;导出在数据包列表中选择的数据包;导出标记的数据包;导出第一个标记到最后一个标记的数据包;选择数据包的范围(如5,10,11-20)导出数据包。如果选择的范围内,有忽略的数据包,还可以选择移除忽略的数据包。
菜单Analyze->Expert Infos菜单项,或者点击下图中左下角的按钮
Analyze->Display Filter,弹出过滤器列表,可以编辑过滤数据包依据的规则,修改可以通过先删除再添加实现,如图
创建过滤宏
Analyze->Display Filter Macros,是用来创建复杂显示过滤器的快捷方式的工具。
Statistics->Summary,弹出下面的窗口,如图33_1,33_2。统计摘要主要包括当前网络数据包文件的一些基本信息。比如文件名、文件大小、第一个包和最后一个包的时间戳、网络传输的相关统计等。如果设置了显示过滤,统计信息会显示成两列。Captured列显示过滤前的信息,Displayed列显示过滤后对应的信息。
一个网络会话,指的是两个特定端点之间发生的通信。例如,一个IP会话是两个IP地址间的所有通信。
Statistics->Conversations,弹出会话统计信息窗口,如图。在该窗口中,每个支持的协议,都显示为一个选项卡。选项标签显示被捕获端点数目(例如:“Ethernet:30”表示有30个Ethernet端点被捕获到)。如果某个协议没有端点被捕获到,选项标签显示为灰色。列表中每行显示单个端点的统计信息。
从Statistics->Endpoints,打开数据包传送中按结束点统计的信息窗口,如图。
按照协议显示结束点的数据包的个数
会话统计与结束点统计的区别:会话统计是以数据包的接收发送端点进行的统计,结束统计是分别以数据包的两个端点为统计方式,进行的统计。
从Statistics->IO Graphs,弹出流量统计信息窗口,如图。
Wireshark根据用户配置生成曲线图。
用户可以对一下内容进行设置:
Statistics->Graph Analysis,弹出数据包传送的分析图,如图。
左侧一列为时间列,右侧一列是数据包的传送。从这里可以查看原地址和目标地址之间发送的数据包。
首先说几个最常用的关键字,“eq” 和 “==”等同,可以使用 “and” 表示并且,“or”表示或者。“!" 和 "not” 都表示取反。
对源地址为192.168.0.1的包的过滤,即抓取源地址满足要求的包。
表达式为:ip.src == 192.168.0.1
对目的地址为192.168.0.1的包的过滤,即抓取目的地址满足要求的包。
表达式为:ip.dst == 192.168.0.1
对源或者目的地址为192.168.0.1的包的过滤,即抓取满足源或者目的地址的ip地址是192.168.0.1的包。
表达式为:ip.addr == 192.168.0.1,
或者 ip.src == 192.168.0.1 or ip.dst == 192.168.0.1
要排除以上的数据包,我们只需要将其用括号囊括,然后使用 “!” 即可。
表达式为:!(表达式)
仅仅需要捕获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可。
表达式为:http
需要捕获多种协议的数据包,也只需对协议进行逻辑组合即可。
表达式为:http or telnet (多种协议加上逻辑符号的组合即可)
排除某种协议的数据包
表达式为:not arp !tcp
针对长度的过虑(这里的长度指定的是数据段的长度)
表达式为:udp.length < 30 http.content_length <=20
针对数据包内容的过滤
表达式为:http.request.uri matches “vipscu” (匹配http请求中含有vipscu字段的请求信息)
通过以上的最基本的功能的学习,如果随意发挥,可以灵活应用,就基本上算是入门了。