在上一篇博文中,主要讲解了wireshark的界面,以及如何抓包和过滤所需要的包。这篇博文主要讲解一下如何分析捕获的数据包。

回顾上一篇的内容:

抓取封包

    启动wireshark,在接口列表中选择网卡接口名,然后点击开始,则在此接口上抓包。菜单:Capture -> Options 可以配置高级属性,但是现在我们先不管。

学习Wireshark之二:数据包分析_过滤器

    选择一个接口,然后点击工具栏的"Start",就可以看到捕获的封包。Wireshark默认会捕获该接口所有发送和接收的封包。

    如果要停止捕获,点击工具栏的"Stop"(红色的小方块),即可。如果不停止,一直会不断的抓取数据包,可能导致我们的内存吃紧。

学习Wireshark之二:数据包分析_接口_02

过滤封包

    默认情况下,Wireshark会捕获大量的封包,以至于我们无法找到所需要的封包。这时就要用到wireshark过滤器。wireshark提供两种类型的过滤器,一种是捕获过滤器,一种是显示过滤器。

    最基本的方式就是使用窗口顶端的显示过滤器,输入过滤表达式(或者点击Expression按钮,然后选择一个过滤表达式)并点击输入框后的"Apply"或者按下回车。

学习Wireshark之二:数据包分析_接口_03同样,我们也可以点击菜单中的Analyze -> Display Filters来自定义我们的过滤条件。

学习Wireshark之二:数据包分析_工具栏_04

另一个很有趣的事情是,在封包列表窗口,选择一个封包然后右键,会出现follow TCP stream或follow UDP stream(SSL我是没见过)可选,然后follow进去。

学习Wireshark之二:数据包分析_过滤器_05

解释一下:Follow Stream是什么意思呢?也就是会话记录,服务器和客户端之间的全部会话记录。

学习Wireshark之二:数据包分析_接口_06

新手上路通常都会疑问,这么多请求我应该follow哪个封包?实际看哪个都是一样。follow进入就是一个历史页面,进入了再慢慢找你需要的数据。你会发现显示过滤表达式被自动生成,wireshark仅显示构成此会话的所有封包。

学习Wireshark之二:数据包分析_过滤器_07    

这里还有一个更好玩的,如何构造显示过滤表达式。

假设我要捕获所有以首部Flags标志为ACK的封包,怎么办呢? 

学习Wireshark之二:数据包分析_接口_08


TCP/IP协议栈(DOD模型)

学习Wireshark之二:数据包分析_过滤器_09


wireshark-以太网帧示例

    wireshark是严格遵循OSI模型规范的。我们知道以太网是实现在数据链路层和物理层的。

学习Wireshark之二:数据包分析_接口_10




IP数据报

学习Wireshark之二:数据包分析_过滤器_11

学习Wireshark之二:数据包分析_工具栏_12

wireshark-IP数据报示例

学习Wireshark之二:数据包分析_过滤器_13


TCP报文段

学习Wireshark之二:数据包分析_过滤器_14

wireshark-TCP报文段示例

学习Wireshark之二:数据包分析_过滤器_15

    我们可以很清晰的看到,wireshark中的首部数据与OSI模型中各协议的首部格式是相对应的。所以,利用wireshark来学习网络,那是非常直观有效的。

学习Wireshark之二:数据包分析_过滤器_16


wireshark 实战演练

实验一:网络中明码传输的危险性

    通过明码传输的protocol和工具相当多,典型的就是telnet,ftp,http。我们拿telnet做这次实验。假设我以telnet方式登录到我的linux服务器,然后通过wireshark抓包,以抓取账号和密码信息。

1、首先启动wireshark,并处于Capture状态。然后通过telnet远程登录我们的linux服务器。

学习Wireshark之二:数据包分析_过滤器_17

进入登录界面后,输入账号和密码登入系统。

学习Wireshark之二:数据包分析_过滤器_18

2、接下来停止wireshark的截取封包的操作,执行快捷方式的"Stop"即可。

    不过,捕获的信息非常多,这个时候可以利用Display Filter功能,过滤显示的内容,如下图所示,点击Expression,然后选择过滤表达式。这里,我们选择TELNET即可。

学习Wireshark之二:数据包分析_工具栏_19

表达式确定之后,选择"Apply",就可以过滤出只包含TELNET的封包

学习Wireshark之二:数据包分析_工具栏_20来,我们查看一下整个telnet会话的所有记录, wireshark可以记录会话记录(就像我们聊QQ时,"QQ聊天记录"一样),任意找到一个telnet封包,右键找到"Follow TCP Stream",wireshark就会返回整个会话记录。

学习Wireshark之二:数据包分析_过滤器_21

OK, 我们看到以下这些数据信息,红色的部分是我们发送出去的DATA,蓝色的部分是我们接收到的DATA。 学习Wireshark之二:数据包分析_工具栏_22, 告诉我, 你看到了什么

学习Wireshark之二:数据包分析_过滤器_23

为了更准确的看清楚,我们再次仅筛选出我们发送出去的DATA。或者仅接收到的DATA。

学习Wireshark之二:数据包分析_工具栏_24

从这里,我们可以确切的抓到账号和密码信息。login:wireshark  Password:123456,除了这些,我们还可以更进一步知道别人在看什么网站,或是私人文件,隐私将毫无保障。

注:为了避免这些情况,防止有心人监测到重要信息,可以使用SSH,SSL,TSL,HTTPS等加密协议对重要数据进行加密,然后再到网络上传输,如果被人截取下来,看到的内容也是被加密的。


实验二:HTTP Protocol

目的:通过观察HTTP协议,练习如何过滤出自己需要的数据,并能够清楚的知道TCP/IP实际的运作方式。

这里,我们采用"(Capture Filter)捕获过滤",菜单栏 Capture -> Options

跟我们相关设定的有如下部分,Use promiscuous mode on all interfaces, Capture Filter, 其实我们需要设定的仅仅是Captrue Filter

学习Wireshark之二:数据包分析_工具栏_25

Capture Filter使用libpcap filter语言,详细的语法可以参考tcpdump的man页面( http://www.tcpdump.org/tcpdump_man.html )

我们这里不需要使用这么复杂的过滤表达式,直接用wireshark已经建立好的常用功能HTTP TCP port(80)即可。首先点击"Capture Filter"按钮,然后选择HTTP TCP port(80), OK之后选择"Start"开始捕获封包。

学习Wireshark之二:数据包分析_接口_26

这里以浏览器访问www.baidu.com首页为例, 来看看访问一个网页会发生什么?

回到wireshark,看到已经抓取了很多封包。OK,前面我们已经交代了TCP/IP协议栈,这里就不再累述。

看下面这幅图中,红色的框框,这就是TCP在做三次握手,建立连接。

学习Wireshark之二:数据包分析_工具栏_27

接下来这一行,就是Client向server作出request。

我们可以在封包详细信息列表框中,针对于每一层查看,更清楚的了解每一层的运作模式,同理也可以使用Follow TCP Stream

学习Wireshark之二:数据包分析_工具栏_28



https://community.emc.com/message/818739#818739

http://openmaniak.com/cn/wireshark_use.php

http://blog.shaolin.tw/2008/03/wireshark.html

http://buzai.me/post-107.html

http://man.lupaworld.com/content/network/wireshark/Introduction.html#whatis