信息安全技术丛书
Network Analysis Using Wireshark Cookbook
古宏霞 孙余强 译
北京
图书在版编目(CIP)数据
Wireshark网络分析实战/(以)奥扎赫(Orzach,Y.)著;古宏霞,孙余强译.--北京:人民邮电出版社,2015.2
ISBN 978-7-115-37771-5
Ⅰ.①W… Ⅱ.①奥…②古…③孙… Ⅲ.①计算机网络—通信协议 Ⅳ.①TN915.04
中国版本图书馆CIP数据核字(2014)第297046号
版权声明
Copyright © Packt Publishing 2013.First published in the English language under the title Network Analysis Using Wireshark Cookbook.
All Rights Reserved.
本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。
版权所有,侵权必究。
◆编著 [以色列]Yoram Orzach
译 古宏霞 孙余强
责任编辑 傅道坤
责任印制 张佳莹 彭志环
◆人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
三河市中晟雅豪印务有限公司印刷
◆开本:800×1000 1/16
印张:26.75
字数:583千字 2015年2月第1版
印数:1-3000册 2015年2月河北第1次印刷
著作权合同登记号 图字:01-2013-9040号
定价:79.00元
读者服务热线:(010)81055410 印装质量热线:(010)81055316
反盗版热线:(010)81055315
本书采用步骤式为读者讲解了一些使用Wireshark来解决网络实际问题的技巧。
本书共分为14章,其内容涵盖了Wireshark的基础知识,抓包过滤器的用法,显示过滤器的用法,基本/高级信息统计工具的用法,Expert Info 工具的用法,Wiresahrk 在 Ethernet、LAN及无线LAN中的用法,ARP和IP故障分析,TCP/UDP故障分析,HTTP和DNS故障分析,企业网应用程序行为分析,SIP、多媒体和IP电话,排除由低带宽或高延迟所引发的故障,认识网络安全等知识。
本书适合对Wireshark感兴趣的网络从业人员阅读,也适合高校网络相关专业的师生阅读。
Yoram Orzach 毕业于色列技术学院(Israel Institute of Technology),持有该校科学学士学位。1991~1995 年,他以系统工程师的身份就职于 Bezeq 公司,从事传输及接入网相关的工作。1995年,他从Leadcom集团(Leadcom group)加盟Netplus公司,并转型为技术管理者。自1999年起,他开始担任NDI通信公司(NDI Communications,http://www.ndi-com.com/)的CTO,负责并参与该公司在全球范围内的数通网络的设计、实施及故障排除工作。Yoram对大型企业网络、服务提供商网络及Internet服务提供商网络极有心得, Comverse、Motorola、Intel、Ceragon Networks、Marvel 以及 HP 等公司都接受过他提供的服务。Yoram在网络设计、实施及故障排除方面浸淫多年,在研发(R&D)、工程、IT团队的培训方面也有丰富的经验。
首先,要感谢我的全家。感谢我的父母:我的父亲Israel——世上独一无二的智者——全家遇难,他以35公斤的瘦弱之躯只身从(纳粹针对犹太人的)大屠杀中脱生,40年后,他成为了电信行业首屈一指的专家;我的母亲Selma则教会我很多。感谢我贤惠的妻子Ena,谢谢你过去20多年来在工作以及其他方面给我的支持。感谢我的孩子Nadav、Dana和Idan,你们的成就让老爸自愧不如。感谢我的妹妹Hana、妹夫Ofer以及我的外甥们。
要感谢我的诸多同事。最先应该感谢 Reuven Matzliach,20 世纪 90 年代末,他和我在Comverse 公司开始筹建IP 培训中心(IP college),并促成了该公司的网络从TDM向IP 转型。在转型期间,他多次助我渡过难关。同样要感谢Omer Fuchs 和Moshe Sakal ,感谢二位在那个大项目里给我的帮助。我还要感谢其他同事及朋友,只是人名太多无法一一列出。
要感谢 Lior Tzuberi,感谢你提供的诸多 WireShark 使用技巧及研究案例。要感谢 Hanan Man,感谢你那个有趣的网络设计。要感谢Yoel Saban和Rami Kletshevsky,感谢你们所奉献的诸多经典的网络设计,你们的设计团队是我见过的最出色的团队之一。要感谢Zvi Shacham,感谢你传授给我的数通网络的经验。要感谢AsiAlajem,感谢你那个很有意思的网络设计;感谢Oren Gerstner,感谢你提供的若干经典的无线网络案例。感谢Chen Heffer,你是我所认识的最最出色的网络安全专家。要感谢 Yoni Zini,感谢你在系统方面给我提供的帮助。感谢Ibrahim Jubram,感谢你奉献的那些精彩的移动网络案例。感谢Ofer Sela,感谢我们一起参与的那些非常有意思的项目。感谢Amir Lavi和Eran Niditz,感谢你们提供的那些趣味横生的案例。感谢Avner Mimon,感谢你提供的诸多绝佳的WireShark 使用技巧。此外,还要感谢许许多多的其他人。
我要感谢教会我诸多网络技能的培训专家。30 年前,我曾以为给人上课也就是图一乐;是你们让我懂得,培训也是一种职业。我要感谢Harriet Rubin、Merav Sagi、Rvital Keinan、Guy Einav、Raanan Dagan以及其他许许多多的培训专家们。
我要特别感谢Yoav Nokrean 跟他的儿子Eran,要感谢你们给我出的那些主意,以及对我全方位的支持。
我还要感谢曾与我朝夕相处的诸位前同事;感谢以色列、欧洲、北美、东亚以及世界其他各地的客户。排除网络故障的手法总是千篇一律,而屋外的风景则十里不同天。
尤其要感谢某些设计出垃圾网络的网络设计“专家”、捣鼓出离奇TCP/IP实现的协议开发人员,以及连线缆都能接错的IT运维人员,外加那些以为设备只要接上线缆便能正常运行的IT施工部门。解决由那些“挫人”、“挫事”引起的故障是学习网络技术的最佳途径。
要感谢我教过的学生们,感谢你们问我的所有刁钻问题,以及带来的有意思的网络案例;每一次给你们上课我都能从中获益。我真不知道还有什么事能比把笔记本电脑连接进真实的网络,解决故障更有意思了。
要感谢我所钦佩的一干网络及安全界的前辈——Vint Cerf、Bob Kahn、Radia Perlman、Adi Shamir、Ronald Rivest、Van Jacobson、Steven McCanne等。没有你们,哪来今天的一切。
最后,要感谢Packt Publishing 出版社能有出版以Wireshark为主题的图书的意愿,并包容我完成本书的写作。
Charles L. Brooks是Security Technical Education公司的创始人和首席咨询顾问,该公司的业务都与IT技术有关,包括IT图书的创作和评论、IT培训和教案设计等。Charles还在积极推广由波士顿大学开办的数据通信及网络技术方面的远程教育课程,并且在布兰代斯大学教授网络安全、软件开发安全、虚拟化安全以及云计算基础架构等方面的课程,在拉布研究生专业进修学院教授信息安全编程(涉及 MS 操作系统)方面的课程。创办 Security Technical Education 公司(www.securityteched.com)之前,Charles在EMC和RSA公司任高级技术教育顾问一职,负责存储安全、大数据、网络安全分析及网络取证等主题的课件开发。加盟EMC公司之前,Charles曾干过许多年的软件工程师、团队组长(team leader)以及软件架构师;最近,他还作为 GTE Internetworking and Genuity公司的系统工程师,负责管理该公司所提供的VPN业务。
Charles握有克拉克大学英语专业的学士和硕士学位、波士顿大学计算机信息系统科学专业的硕士学位,以及包括CISSP、CEH和CHFI在内的多张行业证书。
我要感谢Helyn Pultz,感谢她这么多年来的鼓励、支持和忠告。
Praveen Darshanam在McAfee、Cisco及iPolicy Networks 公司任职多年,有7年以上的信息安全方面的经验。他的强项和兴趣包括:漏洞研究、(病毒或木马)特征的研究、Snort、应用程序安全,以及恶意软件分析等。他持有电子工程(EE)专业的学士学位和控制及仪表专业的硕士学位;他的学士学位获取自印度最好的学府之一。他还拥有包括 CHFI、CEH 和ECSA在内的多张行业证书。
Ritwik Ghoshal是Oracle公司资深的安全分析师,负责Oracle 公司的软、硬件安全性保障工作。他的工作范围包括网络安全、操作系统安全和虚拟化安全等。他于2008年加入SUN公司,在2010年为Oracle公司效力之前(Oracle公司在那一年收购了SUN公司),他一直是SUN公司安全工程团队和Solaris团队的成员。在Oracle公司,Ritwik继续负责所有Sun产品线以及Oracle Linux 和虚拟化产品线的安全性保障工作。
Ritwik 于2008 年获取了Heritage Institute of Technology(印度加尔各答)计算机科学与工程专业的学士学位。
我要感谢我的父母以及Sara E Taverner,感谢你们对我持续的帮助与支持。
Gilbert Ramirez自Wireshark 第一版发布之日起,就是该软件的贡献者。他为该软件添加了协议剖析模块和某些关键组件(比如,显示过滤引擎等),同时为Wireshark向Windows平台的移植做出过贡献。他目前供职于Cisco公司,负责软件系统及软件工具的构建。
Gilbert 是多本 Wireshark 主题书籍的作者,包括 Wireshark & Ethereal Network Protocol Analyzer Toolkit、Ethereal Packet Sniffing以及Nessus, Snort, & Ethereal Power Tools等,这些书籍均由Syngress Publishing Inc.出版社出版。
Wireshark早已成为网络分析领域里的标配工具,随着Internet和TCP/IP网络的极速发展,该工具会受到网络分析专家及排障工程师的热捧,同时也会获得(网络协议或应用程序)研发工程师们的青睐,因为后者需要知道协议在网络中的实际运作方式以及在运行时所碰到问题。
本书的写作立足于实战。本书第1部分(从第1章到第6章)简要介绍了Wireshark软件(的架构)及其各个组件的使用方法。这部分的内容包括Wireshark的启动方法、在网络中的安置方法、信息统计(statistical)工具的使用方法以及专家(Expert)系统的使用方法。本书第2部分(从第7章到第14章)详述了如何使用Wireshark来分析并排除某些常用网络协议的故障;TCP/IP协议栈(特别是TCP性能问题)是这部分的重点内容。此外,还会简要介绍HTTP、SMTP、POP 以及 DNS 等协议,外加数据库、Citrix 和 Microsoft 终端服务器、IP 电话以及多媒体应用所使用的协议,以上协议都属于常用的Internet协议。本书最后一章(第14章)涉及网络安全,介绍了如何利用Wireshark去发现网络中的安全缺陷,同时交代了与安全性有关的其他问题。
本书的书名既然叫《Wireshark网络分析实战》,那么其内容一定是由一系列利用Wireshark对网络故障进行有效性、针对性分析的诀窍所构成。书中包含的每个诀窍都与某一具体的网络故障相关联,在介绍如何使用Wireshark解决相关故障时,作者会指出应关注Wireshark工具的哪些地方、哪些(抓包)内容以及正在处理的故障的起因。为求表述圆满,每个诀窍都会包含相应主题的理论基础知识,好让尚未掌握基础概念的读者先行“武装”自己。
书中包含了许多示例,所有示例均来源于真实案例。作者在处理这些案例时,所花费的时间虽长短不一(有些只花了几分钟时间,有些则要花几小时甚至几天),但所遵循的原则只有一条,那就是:按部就班,选择正确的工具,当应用程序开发者肚里的“蛔虫”,外加从网络的角度思考问题。只要按此原则行事,兼之能活学活用Wireshark,定能将故障查个水落石出。本书的目的也正在于此,享受这一切吧。
本书所含内容
第1章,Wireshark简介,开启了对Wireshark的简要介绍,同时阐述了在有效开展网络分析时,Wireshark 主机(或程序)的布放(或安装)位置问题。在本章,读者会学到如何配置Wireshark的基本(运行)参数、启动窗口、时间参数及配色规则(coloring rules),但本章的重点内容是如何配置首选项窗口(Preferences window)。
第2章,抓包过滤器的用法,介绍了抓包过滤器的使用方法。要让Wireshark只抓取必要的数据包,抓包过滤器不可或缺。本章会详述这一过滤器的配置方法,外加如何使用这一过滤器,让Wireshark只抓取网络工程师“心仪的”数据包。
第3章,显示过滤器的用法,本章说明了显示过滤器的使用方法。通过Wireshark抓取到数据包之后,可定义显示过滤器,让Wireshark只显示出“必要的”数据包。本章会详述这一过滤器的配置方法,同时会介绍如何利用其来帮助排除网络故障。
第4章,基本信息统计工具的用法,说明了Wireshark自带的信息统计工具的基本用法,包括如何用Statistics 菜单下的某些菜单项,生成与相互“沟通”的主机(who is talking)、会话(conversations)及HTTP协议流量等有关的信息统计报表。
第5章,高级信息统计工具的用法,介绍了Wireshark提供的信息统计工具的高级用法,包括如何用Statistics 菜单下的有关菜单项,生成IO 图(IO graph)及TCP流图(TCP stream graph),上述图形可成为网络及应用程序性能分析的重要依据。
第6章,Expert Infos 工具的用法,讲解了如何使用 Wireshark 内置的专家系统(Expert system)工具,该工具的功能极为强大,可对网络中发生的有可能会影响到应用程序正常交付的各种事件(比如,TCP重传、零窗口[zero-window]、TTL过低/路由环路、报文段失序等)“洞察秋毫”。
第7章,Ethernet、LAN交换以及无线LAN,简要介绍了与Ethernet协议及LAN交换有关的基本概念,探讨了可能会发生在第二层的网络故障。此外,本章还重点介绍了无线 LAN (Wi-Fi)相关知识,包括如何测试该网络,以及如何解决发生在该网络中的故障。
第8章,ARP和IP故障分析,简要介绍了与ARP和IP有关的基本概念,探讨了IP连通性故障及路由环路故障的解决方法。此外,本章还讲解了如何发现IP地址冲突,如何解决DHCP及其他相关故障。
第9章,UDP/TCP故障分析,重点关注第四层协议——UDP和TCP——着重讨论与TCP性能有关的问题。本章包含多个定位 TCP 性能问题的诀窍,TCP 重传问题、重复确认问题(duplicate ACK)、滑动窗口(sliding-window)问题(即window-full和zero-window问题)、重置(reset)问题等都属于TCP性能问题。
第10章,HTTP和DNS,重点关注DNS、HTTP及HTTPS协议,将介绍这三种协议的运作方式,同时还会讲解如何排除与三种协议有关的故障。
第11章,企业网应用程序行为分析,探讨了包括FTP、Mail协议以及与终端服务和数据库有关的常用网络协议,在介绍网络故障对上述应用程序的影响的同时,还会给出基本的排障思路。
第12章,SIP、多媒体和 IP 电话技术,介绍了如何利用 Wireshark,去定位及排除依靠IP 传送的语音及视频(voice and video over IP)故障,此类故障包括VoIP SIP连通性故障、RTP/RTCP 故障和视频故障(比如,画面停顿[picture freezing]和画质不佳)等。
第13章,排除由低带宽或高延迟所引发的故障,介绍了如何利用Wireshark,去定位由低带宽、高延迟及高抖动所引发的故障。本章会细述当网络中存在高延迟及高抖动现象时,TCP的种种表现,同时会交待怎样才能让TCP表现得更好。
第14章,认识网络安全,本章重点关注 TCP/IP 网络的安全性,包括如何发现可能会对网络构成危害的扫描行为及 SYN、DoS/DDoS 等攻击行为。本章还会提供发现攻击流量模式的多个诀窍,同时说明这些攻击是如何发动的。
附录、链接、工具及进阶阅读,提供了进一步学习Wireshark软件的重要链接,包括各种学习资源和其他各种辅助软件等。
阅读准备
阅读本书之前,请先下载并安装Wireshark软件,下载链接为www.wireshark.org。
本书的读者对象
本书的读者对象包括使用Wireshark进行网络分析和排除网络故障的研发工程师、技术支持工程师以及IT行业的技术管理人员。阅读本书的读者需掌握网络的基本概念,但不要求读者对具体的协议或厂商实现有深入的了解。
本章涵盖以下内容:
安置Wireshark(主机/程序);
开始抓包;
配置启动窗口;
配置时间参数;
调整配色规则;
保存、打印及导出数据;
配置用户界面(点击EDIT菜单的Preferences菜单项,会弹出Preferences窗口。所谓配置用户界面,就是配置该窗口中User Interface 配置选项里的内容);
配置协议参数(即配置Preferences窗口中Protocol配置选项里的内容)。
本章将介绍 Wireshark 所能行使的基本任务。本书的前言曾提到过网络排障以及内置于Wireshark能帮助排障的各种工具。一旦决定动用Wireshark协议分析软件,在使用之前,则有必要先确定该软件在网络中的部署(或安装)位置。除此之外,还得对该软件做一些基本的配置,至少应让其界面看起来更为友好。
用Wireshark执行基本的抓包操作,配置起来并不麻烦,但是该软件也包含了很多高级配置选项,可用来应对某些特殊情况。这样的特殊情况包括令Wireshark在某条链路上持续抓取数据包的同时,将抓包文件切分为多个较小的文件;让Wireshark在抓包主窗口的数据包列表区域只显示(发包/收包)主机(或设备)的名称而非IP地址等。本章会介绍如何在Wireshark中配置这些高级选项,以应对上述特殊情况。
把Wireshark主机(或程序)安置(或安装)在网络中的哪个地方,令其行使抓包功能,是本章的一大重点。应将 Wireshark 置于防火墙“身前”还是“身后”呢?应置于路由器的WAN一侧,还是LAN一侧呢?到底应在上述的哪些地方才能正确采集到自己想要的数据呢?这些问题的答案、安置Wireshark的诀窍以及更多与Wireshark抓包有关的内容请见1.2节。
如何配置Wireshark时间参数(亦即如何配置Wireshark,让其按网管人员的意愿,来显示数据包的收、发时间的格式),是本章的又一重点内容。在抓取时间敏感型应用程序数据,且希望弄清隶属于同一条TCP连接或UDP流的数据包间的“交互”时间时,如何配置Wireshark时间参数将显得尤为重要。
1.4 节会介绍 Wireshark 数据文件的操作,包括:如何保存抓包数据(是完整还是部分保存);如何保存经过过滤的数据文件;如何以各种文件格式来导出抓包数据;如何合并抓包文件(比如,将两份Wireshark抓包文件合二为一,这两份抓包文件中的数据分别抓取自不同路由器上的以太网接口)等。
本章还会介绍如何调整Wireshark配色规则。所谓调整配色规则,是指配置Wireshark,令其以不同的颜色来显示不同类型(或不同协议)的数据包。虽然Wireshark默认开启了一套配色方案,但在某些特殊情况下,网管人员可能需要对配色方案进行调整,让受监控的特殊协议的数据包或让 Wireshark 把识别出的某些值得关注的错误/事件,以引人注目的颜色显示。1.6节将包括这些内容。
本章最后两节会讨论Wireshark首选菜单项的配置。这两节会讲解Wireshark用户界面的配置(包括如何配置Wireshark主界面;如何在抓包面板中添加或删除数据包属性栏;如何查看数据包属性栏等),以及针对具体协议的配置(包括如何将某个TCP端口号默认解析为应用服务名称;如何验证TCP/UDP校验和;如何验证TCP时间戳;如何解码数据包中各协议头部内的各个字段等)。
看到了网络故障的表象,决定通过Wireshark抓包来查明故障原委之前,应确定Wireshark (程序或主机)的(安装或部署)位置。为此,需弄到一张精确的网络拓扑图(至少也得弄清楚故障所波及的那部分网络的拓扑结构),如图1.1所示。
安置Wireshark的原理非常简单。首先,应圈定要抓取哪些(哪台)设备发出的流量;其次,要把安装了Wireshark的主机(笔记本)连接到受监控设备所连交换机;最后,开启交换机的端口镜像(或端口监控)功能,把受监控设备发出的流量“重定向”给Wireshark主机。
可利用Wireshark监控LAN端口、WAN端口、服务器/路由器端口或连接到网络的任何其他设备的流量。
如图1.1所示,利用Wireshark软件(安装在交换机左边的PC上)外加交换机的端口镜像(也叫做端口监控,需在交换机上激活该特性,流量镜像的方向已在图中标出)功能,便可以监控到进、出服务器S2的所有流量。当然,也可以在服务器S2上直接安装Wireshark,如此行事,便能直接在服务器S2上监控进、出该服务器的流量了。
某些厂商的交换机还支持以下流量监控特性。
监控整个VLAN的流量:即监控整个VLAN(服务器VLAN 或语音VLAN)的流量。可借助该特性,在指定的某一具体VLAN内进行流量监控。
“多源归一”的流量监控方式:以图1.1 为例,借助该特性,可让Wireshark 主机同时监控到服务器S1和S2的流量。
方向选择:可选择监控入站流量、出站流量或同时监控出、入站流量。
1.2.1 准备工作
使用Wireshark抓包之前,请先访问Wireshark官网,下载并安装最新版本的Wireshark。
Wireshark软件的后续更新会发布在其官网http://www.wireshark.org的Download页面下,其最新的稳定版本也可以从该页面下载。
每个Wireshark Windows安装包都会自带WinPcap 驱动程序的最新稳定版本,WinPcap 驱动程序为实时抓包所必不可缺。用于抓包的WinPcap 驱动程序为UNIX Libpcap 库的Windows版本。
1.2.2 操作方法
现以图1.2这一典型网络为例,来简单分析一下该网络的架构、网络中设备的部署及运作方式、Wireshark的安置方法,以及如何按需配置网络设备。
请读者仔细研究一下图1.2所示的简单而又常见的网络拓扑结构。
服务器流量监控
像服务器流量监控这样的需求,在实战中非常常见。要想监控到某台服务器(收/发)的流量,既可以在交换机上针对连接服务器的端口配置端口镜像(如图 1.2 中的编号①所示),将流量“重定向”至Wireshark主机,也可以在服务器上直接安装Wireshark。
路由器流量监控
要想监控进、出路由器的流量,监控其LAN端口(如图1.2中的编号②和⑥所示)或WAN端口(如图1.2中的编号⑤所示)都可以办到。
路由器LAN端口的流量监控起来比较简单,只要在交换机上配置端口镜像,把与路由器LAN口相连的端口的流量“重定向”至连接Wireshark主机的端口。要想监控路由器WAN口的流量,则要在路由器 WAN 口和 SP(服务提供商)网络之间部署一台交换机,在这台交换机上配置端口镜像,如图1.3所示。
在SP网络与路由器WAN口之间部署一台交换机,是一项会导致断网的操作。不过,真要如此行事的话,网络中断的时间最多也就一两分钟。
监控路由器的流量时,有一点请务必留意:发往路由器的数据包并不一定都会得到转发。有些数据包或许会在途中“走失”,而路由器既有可能会因缓存溢出而对部分数据包“忍痛割爱”,也有可能会把某些数据包从接收端口“原路送回”。
执行上述流量监控任务时,可能会用到以下两种设备。
TAP:可在受监控链路上用一种叫做分路器(Test Access Point ,TAP)的设备来取代图 1.3 中的交换机,这是一种简单的“三通”(三端口)设备,执行流量监控时,其所起作用跟交换机相同。与交换机相比,TAP不但便宜而且使用方便。此外,TAP还会把错包原样传递给Wireshark,而LAN交换机则会把错包完全丢弃。交换机不但价格高昂,而且还需要花时间来配置,当然它所支持的监控功能也更多(比如,一般的LAN交换机都支持简单网络管理协议[SNMP])。排除网络故障时,最好能用可网管交换机,哪怕是功能没那么丰富的可网管交换机也好。
HUB:可在受监控的链路上用一台HUB来取代图1.3中的交换机。HUB属于半双工设备,藉此设备,路由器和SP设备之间穿行的每一个数据包都能被Wireshark主机“看”的一清二楚。使用HUB最大的坏处是,会显著加剧流量的延迟,从而对流量采集产生影响。如今,监控1Gbit/s端口的流量可谓是家常便饭,在这种情况下使用HUB,将会使速率骤降至100Mbit/s,这会对抓包产生严重影响。所以说,在抓包时一般都不用HUB。
防火墙流量监控
防火墙流量监控的手段有两种,一种是监控防火墙内口(如图1.2中的编号③所示)的流量,另外一种是监控防火墙外口(如图1.2中的编号④所示)的流量。若监控防火墙内口,则可以“观看”到内网用户发起的所有访问Internet的流量,其源IP地址均为分配给内网用户的内部IP地址;若监控防火墙外口,则能“观看”到的所有(经过防火墙放行的)访问Internet的流量,这些流量的源IP地址均为外部IP地址(拜NAT所赐,分配给内网用户的内部IP地址被转换成了外部IP地址);而由内网用户发起,但防火墙未予放行的流量,监控防火墙外口是观察不到的[1]。若有人(通过Internet)发动对防火墙(或内网)的攻击,要想“观察”到攻击流量,观测点也只能是防火墙外口。
1.2.3 幕后原理
要想弄清端口镜像(端口监控)的运作原理,需先理解LAN交换机的运作方式。LAN交换机执行数据包转发任务时的“举动”如下所列。
1.LAN交换机会“坚持不懈”地学习接入本机的所有设备的MAC地址。
2.收到发往某MAC地址的数据帧时,LAN交换机只会将其从学得此MAC地址的端口外发。
3.收到广播帧时,交换机会从除接收端口以外的所有端口外发。
4.收到多播帧时,若未启用 Cisco 组管理协议(Cisco Group Management Protocol, CGMP)或Internet组管理协议(Internet Group Management Protocol,IGMP)监听特性,LAN交换机会从除接收端口以外的所有端口外发;若启用了以上两种特性之一, LAN交换机将会通过连接了相应多播接收主机的端口,外发多播帧。
5.收到目的MAC地址未知的数据帧时(这种情况比较罕见),交换机会从除接收端口以外的所有端口外发。
综上所述,在LAN交换机上配置端口镜像去监控某个端口时,可“采集”到进、出该端口的所有流量。若只是将一台安装了Wireshark的笔记本接入LAN交换机,未在交换机上开启端口镜像功能,则只能抓到流入或流出该笔记本的所有单播流量,以及同一 VLAN 里的多播及广播流量。
1.2.4 拾遗补缺
使用Wireshark抓包时,还需提防几种特殊情况。
其中的一个特殊情况是,抓取整个VLAN的流量(VLAN流量监控)。在基于VLAN执行抓包任务时,有几个重要事项需要铭记。第一个要注意的地方是,Wireshark 主机只能采集到与其直连的交换机承载的同一VLAN的流量。比方说,在一个交换式网络(LAN)内,有多台交换机都拥有隶属于VLAN 10 的端口,要是只让Wireshark 主机直连某台接入层交换机,那必然采集不到VLAN 10 内其他接入层交换机上的主机访问直连核心层交换机的服务器的流量。
请看图 1.4 所示的网络,用户一般会分布在各个楼层,跟所在楼层的接入层交换机相连。各台接入层交换机会跟一台或两台(为了冗余)核心层交换机相连。Wireshark主机要想抓全某个VLAN的流量,必须与承载此VLAN流量的交换机直接相连,才能采集到相应 VLAN 的流量。因此,要想抓全 VLAN 10 的流量,Wireshark 主机必须直连核心层交换机。
在图1.4中,若Wireshark主机直连SW2,且在SW2上激活了相关端口镜像功能,开始监控VLAN 30 的流量,则其只能抓取到进、出SW2 P2、P4、P5 端口的流量,以及由SW2承载的同一VLAN的流量。该Wireshark主机绝不可能采集到SW3和SW1之间来回穿行的VLAN 30 的流量。
基于整个 VLAN 来实施抓包任务时,可能会抓到重复的数据包,是另外一个需要注意的地方。之所以会出现这种情况,是因为启用端口镜像时,对于在不同交换机端口之间交换的同一VLAN的流量,Wireshark主机会在流量接收端口的流入(input)方向及流量发送端口的流出(output)方向分别抓取一遍。
如图1.5 所示,在交换机上已激活了端口镜像功能,对VLAN 30的流量实施监控。对于服务器S4 向S2 发送的数据包,当其(从连接S4 的交换机端口)流入VLAN 30 时,Wireshark主机将抓取一次;当其从(从连接S2 的交换机端口)流出VLAN 30 时,Wireshark 主机会再抓取一次。这么一来,便采集到了重复的流量。
1.2.5 进阶阅读
欲深入了解端口镜像相关信息,请参阅各网络设备厂商提供的操作手册。有些厂商也把端口镜像称为“端口监控”或SPAN(Switched Port Analyzer)(Cisco 公司)。
某些厂商的交换机支持远程流量监控(能让直连本地交换机的Wireshark主机采集到远程交换机端口的流量)以及高级过滤功能(比如,在把流量重定向给Wireshark主机的同时,过滤掉具有特定 MAC 地址的主机发出的流量)。还有些高端交换机本身就具备抓取并分析数据包的功能。某些交换机还能支持虚拟端口(例如,聚合端口或以太网通道端口)的流量监控。有关详情,请阅读交换机的随机文档。
本节首先将介绍如何启动Wireshark,然后会讲解布放好Wireshark之后,如何对其进行配置,以应对不同的抓包场景。
1.3.1 准备工作
安装过Wireshark之后,需点击桌面→开始→程序菜单或快速启动栏上相应的图标,运行该数据包分析软件。
Wireshark一旦运行,便会弹出图1.6所示的窗口(Wireshark1.10.2运行窗口)。
1.3.2 操作方法
要想让Wireshark软件能抓到数据包,有以下三种途径:点击Capture菜单下的相关菜单项;点击快速启动工具栏里的绿色图标;点击Wireshark主窗口左侧居中的Start区域里的相关选项,如图1.6所示。此外,在抓包之前,还可对Wireshark的某抓包选项进行配置。
如何选择实际用来抓包的网卡
若只是点击图 1.7 所示 Wireshark 快速启动工具栏里的绿色图标(正数第三个图标), Wireshark在抓包时,实际使用的网卡将会是该软件默认指定的网卡(如何更改这一默认配置,详见1.3.3节)。要选择Wireshark抓包时实际使用的网卡,请点击快速启动栏里左边第一个图标(List the available capture interfaces 图标),Wireshark Capture Interfaces 窗口会立刻弹出,如图1.8所示。
要想得知哪块网卡为有效网卡,最佳途径是观察其是否能够收发流量。通过图1.8,可以得知Wireshark感知到的各块网卡正在收、发的数据包的个数(Packets列)及速率(Packets/s列)。
若Wireshark的版本不低于1.10.2,则可以选择一块以上的网卡来同时抓包。如此行事的好处是,只要Wireshark主机配有多块网卡,便可同时监控多个服务器端口、多个路由器(或其他网络设备)端口的流量。图1.9所示为这样的一个应用场景。
如何配置实际用来抓包的网卡
要想对实际用来抓包的网卡做进一步的配置,请点击Capture菜单中的Options菜单项, Wireshark Capture Options窗口会立刻弹出,如图1.10 所示。
在图1.10 所示的Wireshark Capture Options 窗口中,可配置以下参数。
1.在Wireshark Capture Options 窗口的上半部分区域,可以点选实际用来抓包的网卡。
2.在 Wireshark Capture Options 窗口的左中区域有一个 Use promiscuous mode on all interfaces复选框。选中时,会让Wireshark主机抓取交换机(端口镜像功能)重定向给自己的所有数据包,哪怕数据包的目的(MAC/IP)地址不是本机地址;否则, Wireshark 主机只能抓取到目的(MAC/IP)地址为本机地址的数据包,外加广播及多播数据包。
3.在某些情况下,选中该复选框后,Wireshark将不会从无线网卡抓包。因此,若选用无线网卡抓包,且一无所获时,请取消勾选该复选框。
4.在Use promiscuous mode on all interfaces 复选框下有Capture Files 字样,其后有个files 输入栏,可在栏内输入一个文件名,然后再点选use multiple files 复选框。这么一点,Wireshark 不但会把所抓数据保存在由其命名的文件内(其系统路径可由用户指定),而且还可根据特定的需求,以多个文件的形式存储。当以多个文件的形式存储时,在同一目录下,Wireshark会自动在原始文件名后添加后缀“_xxxxx_具体时间”来加以区分。若所要抓取的数据较多,Wireshark的这一功能便非常有用。譬如,在网卡收到的流量较高,或需要长期抓取数据的情况下,就可以利用这一多文件存储功能,基于特定的时间间隔(点选第二个next file every复选框)或希望保存的每个抓包文件的大小(点选第一个next file every复选框),让Wireshark另行打开一个新的文件来保存所抓取的数据。
5.在Wireshark Capture Options 窗口的左下区域,有Stop Capture Automatically 字样。可点选其名下的三个复选框,让 Wireshark 根据抓包时长、所保存的抓包文件的大小或所抓取的数据包的数量,来决定是否停止抓包任务。
6.在Wireshark Capture Options 窗口的右中区域,有Display Options 字样。可点选其名下的三个复选框,来配置Wireshark抓包主窗口的显示选项。点选Update list of packets in real time复选框,Wireshark抓包主窗口将会实时显示抓取到的所有数据包;点选Automatically scroll during live capture 复选框,Wireshark抓包主窗口会在实时显示数据包时自动滚屏;点选Hide capture info dialog复选框,Wireshark 将不再弹出与实际用来抓包的网卡相关联的流量统计窗口。一般而言,无需改变 Wireshark 软件的上述任何一项默认配置。
7.在Wireshark Capture Options 窗口的右下区域,有name resolution字样。可点选其名下的4个复选框,来调整与名字解析有关的配置。点选前三个复选框,就会让Wireshark在显示数据时,解析出与MAC地址、IP地址以及第四层协议端口号相对应的名称(比如,MAC地址所隶属的厂商名、与IP地址相对应的主机名或域名、与TCP/UDP端口号相对应的应用程序名等);点选最后一个复选框 Use external network name resolver,Wireshark便会调用由操作系统指明的名字解析程序(比如,DNS解析程序),来解析上述名称。
1.3.3 幕后原理
Wireshark的抓包原理非常简单。把Wireshark主机上的网卡接入有线或无线网络开始抓包时,介于有线(或无线)网卡和抓包引擎之间的软件驱动程序便会参与其中。在 Windows 和UNIX平台上,这一软件驱动程序分别叫做WinPcap和Libcap驱动程序;对于无线网卡,行使抓包任务的软件驱动程序名为AirPacP驱动程序。
1.3.4 拾遗补缺
若(数据包的收、发)时间是一个重要因素,且还要让Wireshark主机从一块以上的网卡抓包,则 Wireshark 主机就必须与抓包对象(受监控主机或服务器)同步时间,可利用 NTP (网络时间协议)让Wireshark主机/抓包对象与某个中心时钟源同步时间。
当网管人员既需观察Wireshark抓包文件,也需检查抓包对象所生成的日志记录,以求寻得排障线索时,Wireshark 主机与抓包对象的系统时钟是否同步将会变得无比重要。比方说, Wireshark抓包文件显示的发生TCP重传的时间点,与受监控服务器(生成的)日志显示的发生应用程序报错的时间点相吻合,则可以判断 TCP重传是拜服务器(上运行的应用程序)所赐,与网络无关。
Wireshark软件所采用的时间取自操作系统(Windows、Linux等)的系统时钟。至于不同OS中NTP的配置方法,请参考相关操作系统配置手册。
以下所列为在Microsoft Windows 7操作系统内配置时间同步的方法。
1.单击任务栏最右边的时间区域,会出现时间窗口。
2.在时间窗口中点击“更改日期和时间设置”,会弹出“日期和时间”窗口。
3.在“日期和时间”窗口中,点击“Internet时间”标签,再点击“更改设置”,会弹出“Internet时间设置”窗口。
4.在“Internet时间设置”窗口中,选中“与Internet时间服务器同步”复选框,在“服务器”后的输入栏内输入时间服务器(NTP)的IP地址,再点确定按钮。
注意
在Microsoft Windows 7及后续版本的操作系统中,默认包含了几个时间服务器(格式为域名)。可选择一个时间服务器,让网络内的所有主机都与其同步时间。
NTP 是一种网络协议,网络设备之间可藉此协议同步各自的时间。可把网络设备(路由器、交换机、防火墙)及服务器配置为NTP客户端,令它们与同一台NTP时间服务器(时钟源)对时(同步时间),时间精度要取决于那台时间服务器所处的层级(stratum)或等级(level)。NTP时间服务器所处层级越高,其所提供的时间也就越精确。直连原子时钟并提供NTP对时服务的设备被称为1级时钟源,其精度也最高。
RFC 1059(NTPv1)是定义NTP的第一份标准文档,RFC 1119(NTPv2)则是第二份;目前常用的NTPv3和v4 则分别定义于RFC 1305和RFC 5905。
NTP服务器IP地址表可从多处下载,比如http://support.ntp.org/bin/view/Servers/StratumOneTimeServers 和http://wpollock.com/AUnix2/NTPstratum1Public Servers.htm。
1.3.5 进阶阅读
可浏览以下站点,来了解与PACP驱动程序有关的信息。
WinPcap:http://www.winpcap.org
LibPcap:http://www.tcpdump.org
本节会介绍与Wireshark启动窗口有关的基本配置,同时会介绍抓包主窗口、文件格式以及可视选项的配置。
1.4.1 准备工作
启动Wireshark软件,首先映入眼帘的就是启动窗口。可在此窗口中调整以下各项配置参数,来满足抓包需求:
工具条配置;
抓包主窗口配置;
时间格式;
名字解析;
所抓数据包的配色;
抓包时是否自动滚屏;
字体大小;
主窗口数据包属性栏的配置;
配色规则。
先来熟悉一下Wireshark启动窗口内几个常用的工具条(栏),如图1.11所示。
本节将重点介绍下列工具条的结构及用法:
主工具条(Main Toolbar);
显示过滤器工具条(Filter Toolbar);
状态栏(Status Toolbar)。
主工具条
主工具条上各个(组)按钮的用途如图1.12所示。
主工具条最左边一组5个按钮都与抓包操作有关,其余按钮分别涉及文件操作、数据包选择操作、字体缩放操作、配色及自动滚屏、抓包/显示过滤器的调整及应用、帮助等。
显示过滤器工具条
显示过滤器工具条上有一个输入栏和4个按钮,如图1.13所示。
状态栏
在Wireshark主窗口的最底部,有一个状态栏,分5个区域,如图1.14所示。
通过图1.14所示的Wireshark主窗口底部状态栏,可以:
观察到专家系统中的错误[2];
选择为抓包文件添加注释信息;
观察到抓包文件的名称(在抓包期间,抓包文件名由Wireshark软件临时分配);
获知抓包文件中包含的数据包的数量、Wireshark 实际显示出的数据包的数量,以及人为打上标记的数据包的数量。
1.4.2 配置方法
本节会按部就班地指导读者配置Wireshark启动窗口和抓包主窗口。
定制工具条
对于一般情况下的抓包,根本无需调整与Wireshark工具条有关的任何配置。但若要抓取无线网络中的数据(即要让Wireshark主机抓到无线网络里其他主机的无线网卡收发的数据),则需要在Wireshark启动窗口内激活wireless工具栏。为此,请点击启动窗口中的View菜单,并选择Wireless Toolbar 菜单项,如图1.15 所示。
定制抓包主窗口
可按图1.16所示来配置Wireshark,定制其抓包主窗口的界面。
一般而言,无需对Wireshark抓包主窗口的界面做任何调整。但在某些情况下,也有可能需要取消勾选View 菜单中的Packet Bytes菜单项,把抓包主窗口的空间都留给“数据包列表”(对应于View 菜单中的Packet List 菜单项)和“数据包内容”区域(对应于View 菜单中的Packet Details 菜单项)。
名字解析
在Wireshark软件里,名字解析功能一经启用,数据包中的L2(MAC)/L3(IP)地址以及第4层(UDP/TCP)端口号将会分别以有实际意义的名称示人,如图1.17所示。
由图1.17中画线的地方可知,数据包所含MAC地址、IP地址以及TCP端口号都以名称进行相应的替换。
为数据包着色
通常,在使用Wireshark抓包时,应为抓取到的网络中的正常流量建立一个(视觉上的)基线模板。这样一来,便可以一边抓包,一边通过抓包主窗口显示出的数据包的色差,来发现潜在的令人生疑的以太网、IP或TCP流量。
要让Wireshark体现出这样的色差,请在抓包主窗口的数据包列表区域,选择一个深受怀疑或需要着色的数据包,同时点右键,在右键菜单 Colorize Conversation 下点选 Ethernet、IP或TCP/UDP(TCP和UDP只有一项可选,视数据包的第四层类型而定)子菜单项名下的各种颜色(color)菜单项。如此操作,会让该数据包所归属的(Ethernet、IP、UDP或TCP)会话中的所有其他数据包都以相同的颜色示人。
现举一个给抓包文件中的数据包上色的例子,如图 1.18 所示,作者将归属传输层安全(Transport Layer Security,TLS)会话的所有数据包以另外一种颜色示人。
要取消配色规则,请按下列步骤行事。
1.点击View菜单。
2.选择底部的菜单项Reset Coloring 1-10。
抓包时实时自动滚屏的配置
要配置Wireshark使其在抓包时自动滚屏,请按以下步骤行事。
1.点View菜单。
2.选择中间的Auto Scroll in Live Capture菜单项。
字体缩放
要缩放Wireshark抓包主窗口的字体,请按以下步骤行事。
1.点View菜单。
2.放大字体,请点中间的菜单项Zoom In 或按Crtl+“+”键。
3.缩小字体,请点中间的菜单项Zoom Out或按Crtl+“-”键。
本节将介绍如何配置数据包的时间显示格式。对时间显示格式的调整,会在Wireshark抓包主窗口数据包列表区域的time列的内容里反映出来。在某些情况下,有必要让Wireshark以多种时间格式来显示数据包。比方说,在观察隶属同一连接的所有 TCP 数据包时,每个数据包的发送间隔时间是应该关注的重点;当所要观察的数据包抓取自多个来源时,则最应关注每个数据包的确切抓取时间。
1.5.1 准备工作
要配置 Wireshark 抓包主窗口数据包列表区域中的数据包的时间显示格式,请进入 View菜单,选择Time Display Format菜单项,右边会出现图1.19 所示的子菜单。
1.5.2 配置方法
图1.19 所示Time Display Format菜单项的上半部分子菜单包含以下子菜单项。
Date and Time of Day和Time of Day:当通过Wireshark 抓包来帮助排除网络故障,且故障发生的时间也是定位故障的重要依据时(比如,已获悉了故障发生的精确时间,且还想知道相同时间网络中发生的其他事件时),就应该根据具体情况,选择这两个子菜单项之一。
Seconds Since Epoch(自 Epoch 以来的秒数):Epoch 是指通用协调时间(格林威治标准时间的前称)的1970年1月1日早晨0点。这也是UNIX系统问世的大致时间。
Seconds Since Beginning of Capture(自开始抓包以来的秒数):此乃Wireshark 默认选项。
Seconds Since Previous Captured Packet(自抓到上一个数据包以来的秒数):这也是一个常用选项,此菜单项一经点选,数据包列表区域的 time 列将显示每个数据包的抓取时间差。当监控时间敏感型数据包(比如,TCP 流量、实时视频流量、VoIP 语音流量)时,就应该点选该子菜单项,因为此类数据包的发送时间间隔对用户体验有至关重要的影响。
Seconds Since Previous Displayed Packet:在应用了显示过滤器,让Wireshark 只显示抓包文件中部分数据的情况下(比如,只显示出隶属于某条TCP流的所有数据包),通常都应该点选该子菜单项。此时,网管人员更关心的应该是隶属于这条 TCP 数据流的各个数据包之间的抓取时间差。
UTC Date and Time of Day和UTC Time of Day:提供UTC时间。
可使用快捷键Ctrl +Alt + 任意数字键来调整上述时间格式选项。
Time Display Format菜单项的下半部分子菜单提供的是时间精度选项,若无时间精度方面的需求,则应保持默认设置。
1.5.3 幕后原理
为抓到的数据留时间“烙印”时,Wireshark 依据的是操作系统的时间。在默认情况下,生效的是Seconds Since Beginning of Capture子菜单项功能。
Wireshark 会根据事先定义的配色规则,用不同的颜色来“分门别类”地显示抓包文件中的数据。合理的定义配色规则,让不同协议的数据包以不同的颜色示人(或让不同状态下的同一种协议的数据包呈现出多种颜色),能在排除网络故障时帮上大忙。
Wireshark 支持基于各种过滤条件,来配置新的配色规则。这样一来,就能够针对不同的场景,定制不同的配色方案,同时还能以不同的模板来保存。也就是说,网管人员可在解决TCP故障时,启用配色规则A;解决SIP和IP语音故障时,启用配色规则B。
注意
可以通过定义模板(profile)的方式,来保存针对Wireshark软件自身的配置(比如,事先配置的配色规则和显示过滤器等)。要如此行事,请点击EDIT 菜单下的Configuration Profiles 菜单项。
1.6.1 准备工作
要定义配色规则,请按以下步骤行事。
1.选择View菜单。
2.点击底部的Coloring Rules 菜单项,Coloring Rules 窗口会立刻弹出,如图1.20 所示。
1.6.2 配置方法
现在,来看一下如何定义一条新的配色规则。
点击Coloring Rules窗口中的New按钮,Edit Color Filter窗口会立刻弹出,如图1.21所示。
新的配色规则就在此窗口内配置,请按以下步骤行事。
1.在Name输入栏内填入这条规则的名称。譬如,要想专为NTP协议数据包定制配色规则,那就在该输入栏内填入NTP。
2.在String字段内填入显示过滤表达式,指明本配色规则对哪些数据包生效。也可以点击Expression按钮,根据Wireshark预制的显示过滤参数来构造显示过滤表达式。欲知更多与显示过滤器和显示过滤表达式有关的内容,请阅读第3章。
3.点击Foreground Color 按钮,为本配色规则选择一款前景色。此款颜色将成为受本配色规则约束的数据包在抓包主窗口的数据包列表区域里的前景色。
4.点击 Background Color 按钮,为本配色规则选择一款背景色。此款颜色将成为受本配色规则约束的数据包在抓包主窗口的数据包列表区域里的背景色。
5.要是想修改现有的配色规则,请点击Edit按钮。还可以点击Import按钮,导入现成的配色方案,或点击Export按钮导出当前的配色方案。
注意
Coloring Rules 窗口中配色规则的排放次序是有讲究的。请务必确保配色规则的排放次序与配色方案的执行次序相匹配。比方说,作用于应用层协议数据包的配色规则应置于作用于TCP/UDP数据包的配色规则之前,只有如此,方能避免 Wireshark 为应用层协议数据包干扰 TCP/UDP 数据包的颜色。
1.6.3 幕后原理
Wireshark 软件中的许多操作都与显示过滤器紧密关联,定义配色规则也是如此,因为受配色规则“约束”的数据包都是经过预定义的显示过滤器过滤的数据包。
1.6.4 拾遗补缺
可从http://wiki.wireshark.org/ColoringRules下载到很多经典的Wireshark数据包配色方案,在Internet上也能搜到许多其他的配色方案示例。
本节将讨论Wireshark软件中的文件操作,包括数据文件的保存、打印及导出等。
1.7.1 准备工作
运行Wireshark软件,点击主工具条上的抓包按钮,开始抓包(或打开一个已经保存的抓包文件)。
1.7.2 操作方法
在Wireshark主抓包窗口下,既可把抓来的所有数据都保存进一个文件,也能以不同的格式或文件类型导出自己所需要的数据。
现在,来讲解一下如何执行这些操作。
数据保存操作
要把抓包文件中的所有数据包都保存进一个文件(或将现有抓包文件另存为一新文件),请按以下步骤行事。
1.点击File菜单里的Save菜单项(或按Ctrl+S键),在弹出窗口的“文件名”输入栏内输入有待保存的文件名。
2.点击File菜单里的Save as菜单项(或按Shift +Ctrl +S键),在弹出窗口的“文件名”输入栏内输入有待保存的抓包文件的新名称。
若要保存抓包文件(或已抓数据包)中的部分数据(比如,经过显示过滤器过滤的数据),请按以下步骤行事。
1.点击File菜单里的Export Specified Packets 菜单项,Export Specified Packets 窗口会立刻弹出,如图1.22所示。
2.可在Export Specified Packets 窗口的左下角区域,点击相应的单选框,来选择文件的导出方式。
3.要把抓包文件中的所有数据包或所有已抓数据包作为一个文件导出,请同时选择 All packets和Captured单选框,再点Save按钮。
4.要把抓包文件(或已抓数据包)中经过显示过滤器过滤的数据包作为一个文件导出,请同时选择All packets和Displayed单选框,再点Save 按钮。
5.要把已选中的数据包(即在数据包列表区域中用鼠标点选的数据包)作为一个文件导出,请选择Selected packet 单选框,再点Save 按钮。
6.要把所有带标记的数据包(给数据包打标的方法是:先在“数据包列表”区域选中一个数据包,点击右键,在右键菜单中选择Mark packet toggle菜单项)作为一个文件导出,请选择Marked packet 单选框,再点Save 按钮。
7.要把“数据包列表”区域中位列2个带标记的数据包之间的所有数据包作为一个文件导出,请选择First to last marked 单选框,再点Save 按钮。
8.要把抓包文件中编号(详见“数据包列表”区域里的“No.”列)连续的那部分数据包作为一个文件导出,请选择Range单选框,并在其后的输入栏内填写数据包的编号范围,再点Save按钮。
9.导出抓包文件时,要是希望放弃其中的某些数据包,请先在“数据包列表”区域里选中那些数据包,单击右键,选择右键菜单里的Ignore packet toggle 菜单项;然后,选择Export Specified Packets 窗口中的Remove Ignored Packets复选框,再点Save按钮。
再次重申,上述“存盘”操作既可以基于整个抓包文件中的所有数据包来进行,也可以基于抓包文件中经过显示过滤器过滤的数据包来进行。
保存数据的格式选取
Wireshark支持将抓到的数据以不同的格式来保存,好让各种其他工具做进一步的分析。
可让Wireshark将抓取到的数据存为以下格式。
纯文本格式(*.txt):存为纯文本ASCII文件格式。
PostScript(*.pst):存为PostScript文件格式。
逗号分割文件格式(Comma Separated Values)(*.csv):存为逗号分割文件格式。这种格式的文件可为电子表格程序(比如,Microsoft Excel)所用。
C 语言数组格式(*.c):把数据包的内容以C 语言数组的格式保存,可以很方便地将这种文件格式导入C程序。
PSML-XML 格式(*.psml):存为PSML 文件格式。PSML是一种基于XML 的文件格式,只能保存数据包的汇总信息。欲了解与此文件格式有关的详细信息,请见:http://www.nbee.org/doku.php?id=netpdl:psml_specification。
PDML–XML 格式(*.PDML):存为PDML 文件格式。PSML 也是一种基于XML 的文件格式,但能保存数据包的详细信息。欲了解与此文件格式有关的详细信息,请见:http://www.nbee.org/doku.php?id=netpdl:pdml_specification。
要以不同的文件格式来保存 Wireshark 抓取到的数据,请点击 File 菜单的 Export Packet Dissections 菜单项下相应的子菜单项。一旦点击,Export File 窗口会立刻弹出,如图1.23所示。
在图1.23 所示的Export File窗口的下半部分,用方框圈定了2 个区域。左侧区域中的单选或复选框用来完成待存数据的筛选操作,这在上一节已做过深入探讨。右侧区域中的复选框和下拉菜单则用来确定应以何种“精细程度”,来保存抓取到的数据包(“精细程度”分为三种:数据包列表、数据包的详细结构以及数据包的内容,这分别对应于在抓包主窗口中出现的那三个区域里的内容)。
如何打印数据
要想打印数据,请点击File菜单里的Print菜单项,Print窗口会立刻弹出,如图1.24所示。
可在Print窗口中做如下选择。
在窗口的上半部分区域,可选择有待打印的文件格式。
在窗口的左下区域,可选择有待打印的数据包(操作方法类似于文件保存)。
在窗口的右下区域,可选择有待打印的数据包的具体内容,可通过其中的复选框来选择打印抓包主窗口中以下区域的内容:
□ 数据包列表区域(Packet Summary pane);
□ 数据包结构区域(Packet Details pane);
□ 数据包内容区域(Packet Byte pane)。
1.7.3 幕后原理
Wireshark支持以文本格式或postscript格式来打印数据(以后一种格式打印时,打印机应为postscript感知的打印机),同时支持将数据打印至一个文件。选妥了Print窗口中的各个选项,点击Print按钮之后,会弹出操作系统自带的常规“打印”窗口,可在其中选择具体的打印机来打印。
借助于Edit菜单中的Preferences菜单项,能控制Wireshark软件的主界面及软件自身的诸多参数,包括数据包的呈现方式、抓包文件的默认存盘位置,以及用来抓取数据包的网卡等。
本章将介绍Wireshark主界面及软件自身的常用参数的配置,熟知这些参数的配置,可帮助我们更好地应对不同的抓包场景。
1.8.1 配置准备
要配置 Wireshark 的用户界面(主界面),请点击 Edit 菜单中的 Preferences 菜单项, Preferences窗口会立刻弹出,如图1.25所示。
在本章接下来的内容中,会介绍Preferences窗口中以下参数的配置:
Columns(数据包属性列);
Capture(抓包方式);
Name Resolution(名字解析)。
1.8.2 配置方法
本节会介绍如何调整事关Wireshark软件自身的配置参数。
调整及添加数据包属性列
在默认情况下,显现在抓包主窗口的数据包列表区域里的数据包属性列有:No.(编号)、Time(抓取时间)、Source(源地址)、Destination(目的地址)、Protocol(协议类型)、Length (长度)以及Info(信息),可通过图1.26所示的Preferences窗口来调整出现在数据包列表区域里的数据包属性列。
要给数据包列表区域添加一新列,可通过以下两个途径。
1.从Preferences 窗口下部的Field type下拉菜单栏里,选择预先定义好的属性列。这些预先定义好的属性列包括time delta、 IP DSCP value、src port和dest port等。
2.点击Add按钮,从Preferences 窗口下部的Field type下拉菜单栏里,选择Custom 菜单项,定制数据包属性列。此时,可在图 1.26 所示的 Field name 输入栏内输入可在显示过滤器中露面的任一参数,然后点击OK按钮,将这一新列添加至抓包主窗口。之后,在抓包主窗口选中该列,点击右键,选择右键菜单中的Edit Column Details 菜单项,便可以为新添加的这一新列改名了。
下面举几个用Custom菜单项定制数据包属性列的例子。
1.要想在抓包主窗口中新增一列,以便观看TCP数据包的TCP窗口大小,需在Field name输入栏内输入显示过滤器参数tcp.window_size。
2.要想在抓包主窗口中新增一列,以便观看每个IP数据包包头中的TTL字段值,需在Field name 输入栏内输入显示过滤器参数ip.ttl。
3.要想在抓包主窗口中新增一列,以便观看每个RTP数据包中marker位置1的实例,需在Field name输入栏内输入显示过滤器参数rtp.marker。
4.在分析网络故障时,酌情使用 Custom 菜单项定制数据包属性列,可加快定位故障的原因,与此有关的内容本书后文再叙。
调整跟执行抓包任务有关的配置
执行抓包任务之前,可调整涉及抓包的配置。为此,请在Preferences窗口中点击Capture选项,如图1.27所示。
要想更改默认用来抓取数据包的网卡,请点击Edit 按钮,在弹出的Interface Option 窗口中选择相应的网卡,再点OK按钮即可(重启Wireshark软件之后才能生效)。当然,这里更改的只是默认配置,可在每次重新开始抓包之前,更换用来接收数据包的网卡。
调整名字解析
Wireshark支持以下三个层级的名字解析(见图1.28)。
在第二层(L2):Wireshark可把MAC 地址的前半部分解析并显示为网卡芯片制造商的名称或 ID。比方说,可把一个 MAC 地址的前三个字节 14:da:e9 解析并显示为AsusTeckC (ASUSTeK Computer Inc)。
在第三层(L3):Wireshark 可把 IP 地址解析并显示为 DNS 名称,比如可把157.166.226.46这一IP地址,解析并显示为www.edition.cnn.com。
在第四层(L4):Wireshark可把TCP/UDP 端口号解析并显示为应用程序(服务)名称,比如可把TCP 80 端口解析并显示为HTTP,把UDP 53 端口解析并显示为DNS。
注意
在第四层,只有接收由客户端发起的会话建立请求的 TCP/UDP 目的端口号才有做名字解析的意义。客户端用来发起会话建立请求的TCP/UDP源端口号是一个随机端口号(大于1024),因此并没有转换成应用程序(服务)名的必要。
在默认情况下,Wireshark只会针对第二层MAC地址和第四层TCP/UDP端口号做名字解析。开启IP地址的名字解析功能之前要三思而后行,因为这会让Wireshark委托OS发出大量DNS查询消息,从而拖慢Wireshark的运行速度。
1.8.3 幕后原理
原理非常简单,只是调整Wireshark某些菜单项的配置而已。要修改Wireshark主界面,除了本节介绍的配置选项之外,还有其他配置选项可供选择。更多详情请参考www.wireshark.org上的Wireshark配置手册。
借助于Preferences窗口中的Protocol选项,可调整Wireshark对相关协议流量的抓取和呈现方式。本节会介绍如何借助 Preferences 窗口中的 Protocol 配置选项,来调整 Wireshark对常见协议流量的抓取和呈现方式。
1.9.1 配置准备
1.点击Edit菜单中的Preferences菜单项,Preferences窗口会立刻弹出,如图1.29所示。
2.在Preferences窗口的左边找到Protocols配置选项,点其左边的“+”号,会出现一份“协议”列表。在这份列表里包含了诸多常用或不常用协议。此处只讨论某些常用协议的配置,对相关协议的介绍详见7~14章。
1.9.2 配置方法
本节将介绍以下“基本”协议的配置方法(“基本”意指常用,并不是指简单):
IPv4/IPv6;
TCP/UDP。
配置Protocol选项里的IPv4和IPv6协议
在Preferences窗口的Protocols选项里选中IPv4或IPv6协议时,窗口的右边会出现若干子选项,如图1.30所示。
下面是对IPv4协议下若干子选项的解释。
Decode IPv4 ToS field as DiffServ Field:制定 IPv4 协议标准之初,为能在 IPv4网络中保证服务质量,在IPv4包头中设立了一个叫做“服务类型(ToS)”的字段。后来,IETF 又制定了一套 IPv4 服务质量的新标准(区分服务,DiffServ),打的也是IPv4包头中原ToS字段的主意,只是对其中各个位的置位方式有了新的定义。若未勾选与 Decode IPv4 ToS field as DiffServ Field 子选项相关联的复选框, Wireshark便会按老的IPv4服务质量标准,来解析所抓IPv4数据包包头中的ToS字段。
Enable GeoIP lookups:GeoIP 是一个数据库,Wireshark 可根据该数据库里的内容,来呈现(其所抓数据包IP包头中源和目的)IP地址所归属的地理位置。若勾选与Enable GeoIP lookups 子选项相关联的复选框,Wireshark 便会针对所抓IPv4 和IPv6 数据包的 IP 地址来呈现其所归属的地理位置。该子选项功能涉及名字解析,一旦开启,便会拖慢Wireshark实时运行速率。
配置 Protocol选项里的UDP和TCP协议
UDP协议非常简单,因此Protocols选项里UDP协议名下可配置的子选项并不多;而TCP协议则很是复杂,Protocols选项里TCP协议名下可配置的参数(子选项)也要多于UDP协议(见图1.31)。
更改TCP协议名下的各个参数,其实也就是调整Wireshark对TCP数据包的解析方式。
Validate the TCP checksum if possible:有时,Wireshark 会抓到超多校验和错误(checksum errors)的数据包,这要归因于在抓包主机的网卡上开启的TCP Checksum offloading(TCP校验和下放)功能。该功能一开,便会导致Wireshark将抓到的本机生成的数据包显示为“checksum errors”(具体原因后文再表)。因此,若 Wireshark抓到了超多校验和错误的数据包,则有必要先取消勾选与Validate the TCP checksum if possible子选项关联的复选框,再去验证是否真的存在校验和问题。
Analyze TCP Sequence numbers:要让Wireshark对TCP数据包做详尽分析,就必须勾选与 Analyze TCP Sequence numbers 参数相关联的复选框,因为“TCP Sequence numbers(TCP序列号)”是TCP最重要的特性之一。
Relative Sequence Numbers:主机在建立TCP连接时,会启用一个随机的序列号,并将其值存入相互交换的第一个报文段的 TCP 头部的序列号字段[3]。只要勾选了与Relative Sequence Numbers 参数相关联的复选框,Wireshark 就会把(一股TCP 数据流中的)第一个TCP报文段的(TCP头部的)序列号字段值显示为0,后续TCP报文段的序列号字段值将依次递增,从而隐藏了真实的序列号字段值。在大多数情况下,都应该让Wireshark显示TCP 报文段的相对序列号(relative number),以方便网管人员查看。
Calculate conversations timestamps:与该参数相关联的复选框一经勾选,在抓包主窗口的数据包结构区域中,只要是TCP数据包,就会在transmission control protocol树下多出一个Timestamps结构,点击其前面的“+”号,就能看到Wireshark记录的该TCP数据包在本股TCP数据流中的相关时间戳(Timestamps)参数。让Wireshark显示TCP数据包的Timestamps信息,将有助于排查当时间敏感型TCP应用程序故障。
1.9.3 幕后原理
通过修改Preferences窗口中Protocols选项下相关协议的参数,便能开启或禁用Wireshark软件对相应协议流量的某些分析功能。需要注意的是,为了保证Wireshark软件的运行速度,应尽量禁用不必要的分析功能。
1.9.4 进阶阅读
欲知更多与GeoIP有关的信息,请访问http://wiki.wireshark.org/HowToUseGeoIP。
注 释
[2].译者注:原文是“Errors in the expert system”,译文直译。有句土话叫“东一榔头,西一棒槌”,应该很贴切地形容了作者的写作风格。
[3].译者注:原文是“when TCP opens a connection, it starts from a random sequence number”。