在上一篇博文中,主要讲解了wireshark的界面,以及如何抓包和过滤所需要的包。这篇博文主要讲解一下如何分析捕获的数据包。
回顾上一篇的内容:
抓取封包
启动wireshark,在接口列表中选择网卡接口名,然后点击开始,则在此接口上抓包。菜单:Capture -> Options 可以配置高级属性,但是现在我们先不管。
选择一个接口,然后点击工具栏的"Start",就可以看到捕获的封包。Wireshark默认会捕获该接口所有发送和接收的封包。
如果要停止捕获,点击工具栏的"Stop"(红色的小方块),即可。如果不停止,一直会不断的抓取数据包,可能导致我们的内存吃紧。
过滤封包
默认情况下,Wireshark会捕获大量的封包,以至于我们无法找到所需要的封包。这时就要用到wireshark过滤器。wireshark提供两种类型的过滤器,一种是捕获过滤器,一种是显示过滤器。
最基本的方式就是使用窗口顶端的显示过滤器,输入过滤表达式(或者点击Expression按钮,然后选择一个过滤表达式)并点击输入框后的"Apply"或者按下回车。
同样,我们也可以点击菜单中的Analyze -> Display Filters来自定义我们的过滤条件。
另一个很有趣的事情是,在封包列表窗口,选择一个封包然后右键,会出现follow TCP stream或follow UDP stream(SSL我是没见过)可选,然后follow进去。
解释一下:Follow Stream是什么意思呢?也就是会话记录,服务器和客户端之间的全部会话记录。
新手上路通常都会疑问,这么多请求我应该follow哪个封包?实际看哪个都是一样。follow进入就是一个历史页面,进入了再慢慢找你需要的数据。你会发现显示过滤表达式被自动生成,wireshark仅显示构成此会话的所有封包。
这里还有一个更好玩的,如何构造显示过滤表达式。
假设我要捕获所有以首部Flags标志为ACK的封包,怎么办呢?
TCP/IP协议栈(DOD模型)
wireshark-以太网帧示例
wireshark是严格遵循OSI模型规范的。我们知道以太网是实现在数据链路层和物理层的。
IP数据报
wireshark-IP数据报示例
TCP报文段
wireshark-TCP报文段示例
我们可以很清晰的看到,wireshark中的首部数据与OSI模型中各协议的首部格式是相对应的。所以,利用wireshark来学习网络,那是非常直观有效的。
wireshark 实战演练
实验一:网络中明码传输的危险性
通过明码传输的protocol和工具相当多,典型的就是telnet,ftp,http。我们拿telnet做这次实验。假设我以telnet方式登录到我的linux服务器,然后通过wireshark抓包,以抓取账号和密码信息。
1、首先启动wireshark,并处于Capture状态。然后通过telnet远程登录我们的linux服务器。
进入登录界面后,输入账号和密码登入系统。
2、接下来停止wireshark的截取封包的操作,执行快捷方式的"Stop"即可。
不过,捕获的信息非常多,这个时候可以利用Display Filter功能,过滤显示的内容,如下图所示,点击Expression,然后选择过滤表达式。这里,我们选择TELNET即可。
表达式确定之后,选择"Apply",就可以过滤出只包含TELNET的封包
来,我们查看一下整个telnet会话的所有记录, wireshark可以记录会话记录(就像我们聊QQ时,"QQ聊天记录"一样),任意找到一个telnet封包,右键找到"Follow TCP Stream",wireshark就会返回整个会话记录。
OK, 我们看到以下这些数据信息,红色的部分是我们发送出去的DATA,蓝色的部分是我们接收到的DATA。 , 告诉我, 你看到了什么
为了更准确的看清楚,我们再次仅筛选出我们发送出去的DATA。或者仅接收到的DATA。
从这里,我们可以确切的抓到账号和密码信息。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
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"开始捕获封包。
这里以浏览器访问www.baidu.com首页为例, 来看看访问一个网页会发生什么?
回到wireshark,看到已经抓取了很多封包。OK,前面我们已经交代了TCP/IP协议栈,这里就不再累述。
看下面这幅图中,红色的框框,这就是TCP在做三次握手,建立连接。
接下来这一行,就是Client向server作出request。
我们可以在封包详细信息列表框中,针对于每一层查看,更清楚的了解每一层的运作模式,同理也可以使用Follow TCP Stream
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