Wireshark网络分析从入门到实践
上QQ阅读APP看书,第一时间看更新

简单来说,Wireshark是一个可以运行在各种主流操作系统上的数据包分析软件。下面我们将分别了解它的功能、历史、工作原理和优势。

在开始回答“Wireshark是什么?”这个问题之前,我们应该先来简单地了解网络的工作模式。当我们使用应用程序(比如QQ)向目标发送一份文件的时候,这份文件会被分割成多个数据单元并在网络上传输。这是因为现代网络采用了一种叫作“分组交换”的方法,它最大的特点就是将较大的信息拆分成基本单元。而这种基本单元就是我们平时所说的“数据包”。简单来看,数据包由包头和包体两部分组成,其中包头主要是一些源地址和目标地址的信息,包体里面则是要传输的真正信息。打个比方,这些数据包就好像我们日常发送物品所使用的快递一样,包头就好像快递标签,而包体则如同里面的物品。

对于数据包进行研究可以找出很多问题的原因,但是在正常情况下,应用程序和操作系统在产生了数据包之后,会发送到网卡,然后再由网卡交给网络中的设备发送出去。这个过程中,我们是无法见到这些数据包的。而如果你使用了Wireshark的话,那么网卡无论是接收还是发送数据包的时候,都会将这些数据包复制一份发送给Wireshark。这样不管数据包来自哪里,还是去往何处,经过这个网卡的数据包都会被Wireshark所获取了。这个获取流经网卡数据包的过程,也被称为“捕获数据包”或者简称为“抓包”。

可是如果只是捕获到了这些数据包的话,我们还是很难弄清楚这些数据包的真正含义。因为这些数据包是以0和1进行编码的,也就是说无论是你在访问一个网站,还是在看在线视频,或者联机游戏,在网络中产生的数据包都是大量的0和1的组合,比如“00010100 01000100”这种形式,如果使用手工来分析这些数据含义的话,那么付出的工作量之大将会是无法想象的。这也是我们要使用Wireshark的第二个原因,它可以将捕获到的数据包进行自动分析,把这些0和1的组合解析成我们容易理解的形式,这个过程就是“数据包分析”。

好了,现在我们来回答一下“Wireshark是什么”,答案就是一个可以进行数据包的捕获和分析的软件。

现在我们已经知道Wireshark是什么了,但是它又是怎么产生的呢?

“生命里最重要的事情是要有个远大的目标,并借才能与坚毅来达成它。”在20多年前,一个叫Gerald Combs的年轻人在密苏里大学堪萨斯分校完成了自己的学业,进入到了当时名不见经传的NIS(Network Integration Services)工作。NIS是一家小型的互联网服务提供商,因此Gerald Combs经常需要对网络的各种故障进行分析。这些工作如果仅仅依靠手工来完成的话将会十分复杂。虽然在当时的世界上已经有了一些可以完成网络分析的工具,但是它们的缺点十分明显,一方面价格过高,另一方面只能运行在特定的操作系统中。

当时的大部分网络工程师们只有两个选择,要么继续依靠手工来完成工作,要么只能使用盗版的网络分析工具,可能还得更换操作系统。不走寻常路的Gerald Combs做出了一个大多数人都不看好的选择,那就是自行去编写一个网络分析软件。虽然没有人相信Gerald Combs会成功,但是他仅仅用了一年的时间就证明了自己。1998年7月,Gerald Combs开发的网络分析软件就面世了,这款工具当时被命名为Ethereal,也就是现在Wireshark的前身。

如果Gerald Combs以此赚钱的话,那么现在世界上可能会多一家网络巨头公司,不过他放弃了这个机会,选择了以开源免费的形式将Ethereal发布了出去。由于这个工具强大且易用,很快就得到了人们的喜爱,而世界各地的开发者们也纷纷参与到了这个项目中。Ethereal也正式进入了高速发展的时期,迅速成为了世界上最受欢迎的软件之一。在2006年的时候,Ethereal更名为Wireshark,继续着演绎着它的传奇。

而现在Wireshark的应用更为广泛,无论你是一个要解决实际问题的网络工程师,还是一个希望了解网络世界的爱好者,Wireshark都将是你最好的选择。

接下来我们来了解Wireshark的工作原理,这里面涉及一个最为重要的概念就是网卡。

网卡在对接收到的数据包进行处理之前,会先对它们的目的地址进行检查,如果目的地址不是本机的话,就会丢弃这些数据,相反就会将这些数据包交给操作系统,操作系统再将其分配给应用程序。如果启动了Wireshark的话,操作系统会将经过网卡的所有数据包都复制一份并提供给它,这样我们就可以在Wireshark中查看到本机所有进出的数据包了。

但是我们有时要查看的不仅仅是本机的数据包,还会查看其他计算机上的数据包,这时如果网卡按照上面一段讲到的方式进行工作的话,那么其他计算机上的数据包在到达网卡时,都会被丢掉,而无法显示。所以我们必须调整网卡的工作方式,目前的网卡除了前面提到的那种普通模式之外,还提供了一种混杂模式。默认情况下,网卡只会将发给本机的数据包传递给操作系统,其他的一律丢弃。而混杂模式下,网卡则会将所有通过它的数据包(不管是不是发给本机)都传递给操作系统。所以在使用Wireshark进行网络分析时,我们经常需要使用混杂模式。

在了解了混杂模式的概念之后,我们再来看Wireshark的工作流程。

(1)捕获:Wireshark将网卡调整为混杂模式,在该模式下捕获网络中传输的二进制数据。

(2)转换:Wireshark将捕获到的二进制数据转换为我们容易理解的形式,同时也会将捕获到的数据包按照顺序进行组装。

(3)分析:最后Wireshark将会对捕获到的数据包进行分析。这些分析包括识别数据包所使用的协议类型、源地址、目的地址、源端口和目的端口等。Wireshark有时也会根据自带的协议解析器来深入地分析数据包的内容。

Wireshark就像网络世界的显微镜,你可以在它的帮助下了解网络中发生的一切。不过也许有接触过网络分析的读者会有异议,为什么是Wireshark?TcpDump用起来不是显得更专业?另外Sniffer不也有人在用?没错,这些工具都曾经或者正在人们对网络世界的观察中起着重要的作用。那么相比起这些工具,Wireshark的优势又在哪里呢?

•Wireshark可以在所有的主流操作系统中运行。无论你是哪一个操作系统Windows、Linux或者Mac OS的忠实用户都没关系,在Wireshark的官方网站上你都可以下载到适合自己操作系统的版本。

•Wireshark支持更多的网络协议。如果两个人要进行交谈的话,他们就必须使用相同的语言,比如英语。而不同的设备之间如果要进行通信,那么这些设备之间必须要使用相同的网络协议。这些协议就如同我们现实世界中的语言一样,数量众多。显然哪一种分析工具支持的网络协议越多,它可以应用的场景也就越多,这也正是Wireshark的优势之一。随着Wireshark版本的不断更新,里面也添加了大量的新协议,例如最新的2.6版中又添加了数十种协议,支持了世界上所有常见的网络协议。

•极为友好的使用界面。虽然使用TcpDump命令行式的工作界面会让你看起来很酷,但是对于初学者来说这种工作方式却是十分令人难以接受的。即使是熟练使用命令行工具的老手也不得不承认图形化工作界面要便利很多。因此,无论你是一个刚刚接触网络科学的初学者,还是一个已经工作很久的工程师,Wireshark优秀的图形化操作界面都会给你带来惊喜。

•对网络数据实时的显示。以前的很多网络分析工具都采用了先捕获网络中的数据,等到捕获停止的时候,再显示出这些数据的工作方式。这样使用者是无法实时地观察网络中的运行情况的。而Wireshark采用了实时的工作方式,它可以立刻将捕获到的数据显示出来,以便我们对网络进行实时的监控,及时掌握整个网络的运行状况。

•Wireshark是开源项目,目前全世界有很多爱好者都参与了Wireshark的开发。而Wireshark中也提供了极为友好的扩展功能开发环境,当你有了新的需求时,就可以自己编写代码来实现。这样Wireshark就不再只是一个单纯的“武器”了,而是变成了一个可以生产各种“武器”的“兵工厂”。

有了这些优势,Wireshark当之无愧地成为了现在世界上极为流行的数据包分析工具,它得到几乎所有网络行业人员的喜爱。

在刚接触到Wireshark时,你可能并不知道会在什么场合下使用这个工具,而下面给出了一些Wireshark可以大展身手的场景。

•经过多年的努力,你如愿进入了理想的大学,成为了一名计算机专业的大学生,从此可以在阳光充足的教室里听着教授精彩的课程。可是“既然有了IP地址,为什么还有硬件地址?”“网络为什么要分层呢?”“数据帧是什么?数据包是什么?数据报又是什么?”你是不是也正在为这些问题所困扰呢?没错,书上的知识太过抽象了。这时你不妨在Wireshark的帮助下好好了解一下网络运行的真实情形,相信会对你有很大的帮助。

•经过了数年的学习,现在你大学毕业了,很快找到了一份理想的工作。你要负责一家企业的网络管理工作。你的耳边每天总是不断地响起 “快来看看,为什么我不能上网了?”“为什么网络变得这么慢?”“为什么公司的服务器不能访问了?”你每天都要为解决同事们提出的这类问题而疲于奔命。如果你希望快速找出网络中出现问题的源头,此时Wireshark绝对是一个最佳的选择。

•几年后你从原来的单位离职,进入了一家网络设备销售厂家,负责将这些设备部署到客户的网络中。很快客户的网络不断地出现各种问题,当然这些问题可能根本与部署的设备无关。客户把解决问题的希望全部放在你的身上,可是你偏偏身处异地。这时一个不错的选择就是让客户使用Wireshark将发生问题时数据包保存成文件,而你就可以在远方使用Wireshark对这个文件进行分析,从而找出问题的所在。

总而言之,当你需要对网络进行研究时,Wireshark绝对是一个最为理想的帮手。