• 文章搜索:
  • 兵器谱

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    WireShark(威而鲨)第一式--抓包鱼翅手

    作者:  |  上传时间:2014-03-20  |  关键字:WireShark(威而鲨)第一式--抓包鱼翅手

    --吴昊

    1、 了解WireShark

    a) 什么是Wireshark

    Wireshark 是网络报文分析工具。网络报文分析工具的主要作用是尝试捕获网络报文, 并尝试显示报文尽可能详细的内容。

    过去的此类工具要么太贵,要么是非公开的。 直到Wireshark(Ethereal)出现以后,这种情况才得以改变。

    Wireshark可以算得上是今天能使用的最好的开源网络分析软件。

    b) WireShark简史

    1997年,Gerald Combs 需要一个工具追踪网络问题,并且想学习网络知识。所以他开始开发Ethereal (Wireshark项目以前的名称) 以解决自己的需求。

    1998年,Ethreal0.2.0版诞生了。此后不久,越来越多的人发现了它的潜力,并为其提供了底层分析。

    2006年Ethreal改名为Wireshark.。

    2008年,在经过了十年的发展后,Wireshark发布了1.0版本。

    c) WireShark可以做什么

    简而言之,WireShark主要作用就是可以抓取各种端口的报文,包括有线网口、无线网口、USB口、LoopBack口等等,从而就可以很方便地进行协议学习、网络分析、系统排错等后续任务。

    d) 不同平台下的WireShark

    目前WireShark支持几乎所有主流报文文件,包括pcap,cap ,pkt,enc等等。

    但是不同平台下的WireShark却有功能上的不同。

    总体来说,Linux版本WireShark的功能和特性比Windows版本的要丰富和强大。例如,Linux版本的WireShark可以直接抓取USB接口报文,而Windows版本就不行。

    Figure 1,Linux下的WireShark

    Figure 2,Windows下WireShark

    Figure 3,各平台下的WireShark所支持的协议

    各平台下的WireShark支持的协议如上图所示。从图中可以看到Linux下的版本功能最强大,由于平台本身特性,可以使WireShark几乎支持所有协议。

    但由于我们平时工作中主要抓取以太网报文,且绝大部分的操作系统都是Windows,所以本文还是以Windows平台下的WireShark为例来进行说明。

    2、 使用WireShark抓取报文

    a) WireShark组网拓扑

    为了抓到HostA与HostB之间的报文,下面介绍几种WireShark组网。

    i. 在线抓取

    如果WireShark本身就是组网中的一部分,那么,很简单,直接抓取报文就行了。

    Figure 4,Switched Media-Same Computer

    ii. 串联抓取

    串联组网是在报文链路中间串联一个设备,利用这个中间设备来抓取报文。

    这个中间设备可以是一个HUB,利用HUB会对域内报文进行广播的特性,接在HUB上的WireShark也能收到报文。

    Figure 5,Switched Media –“Hubbing Out”

    若是WireShark有双网卡,正确设置网络转发,直接串接在链路上。

    Figure 6,Machine-in-the-middle

    也可以利用Tap分路器对来去的报文进行分路,把报文引到WireShark上。

    Figure 7,Switch+Tap

    串联组网的好处是报文都必须经过中间设备,所有包都能抓到。缺点是除非原本就已经规划好,不然要把报文链路断开,插入一个中间设备,会中断流量,所以一般用于学习研究,不适用于实际业务网。

    iii. 并联抓取

    并联组网是将现有流量通过现网设备本身的特性将流量引出来。

    若是网络本身通过HUB组网的,那么将WireShark连上HUB就可以。

    Figure 8,Shared Media

    若是交换机组网,那直接连上也能抓取广播报文。

    Figure 9,Switch-MAC Flooding

    当然,最常用的还是利用交换机的镜像功能来抓包。

    Figure 10,Switch+ Monitor Port

    并联组网的优点是不用破坏现有组网,适合有业务的在线网络。缺点是HUB组网已经不常见,而交换机组网的设备开启镜像后,对性能有非常大的影响。

    b) WireShark的安装

    WireShark是免费开源软件,在网上可以很轻松获取到。

    Windows版的WireShark分为32位而64位两个版本,根据系统的情况来决定安装哪一个版本,虽然64位系统装32位软件也能使用,但装相应匹配的版本,兼容性及性能都会好一些。

    在Windows下,WireShark的底层抓包工具是Winpcap,一般来说WireShark安装包内本身就包含了对应可用版本的Winpcap,在安装的时候注意钩选安装就可以。

    安装过程很简单,不再赘述。

    c) 使用WireShark抓取网络报文

    1. 选择需要抓取的接口,点选Start就开始抓包。

    Figure 11,选取接口开始抓包

    Figure 12,查看报文

    d) 使用WireShark抓取MPLS报文

    对于mpls报文,wireshark可以直接抓取带MPLS标签的报文。

    Figure 13,MPLS报文

    e) 使用WireShark抓取带Vlan Tag的报文

    早期网卡的驱动不会对VLAN TAG进行处理,而是直接送给上层处理,在这种环境下,WireShark可以正常抓到带VLAN TAG的报文。

    而Intel,broadcom,marvell的网卡则会对报文进行处理,去掉TAG后再送到上层处理,所以WireShark在这种情况下通常抓不到VLAN TAG。这时我们需要针对这些网卡做一些设置,WireShark才能够抓取带VLAN TAG的报文。

    1. 更新网卡的最新驱动

    2. 按照以下说明修改注册表

    a) Intel

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\00xx(where xx is the instance of the network adapter that you need to see tags on. )

    PCI或者PCI-X网卡增加dword:MonitorModeEnabled,通常设置为1即可

    0 - disabled (Do not store bad packets, Do not store CRCs, Strip 802.1Q vlan tags)

    1 - enabled (Store bad packets. Store CRCs. Do not strip 802.1Q vlan tags)

    PCI-Express网卡增加dword:MonitorMode,通常设置为1即可

    0 - disabled (Do not store bad packets, Do not store CRCs, Strip 802.1Q vlan tags)

    1 - enabled (Store bad packets. Store CRCs. Do not strip 802.1Q vlan btag)

    2 - enabled strip vlan (Store bad packets. Store CRCs. Strip 802.1Q vlan tag as normal)

    b) Broadcom

    在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet下搜索,找到"TxCoalescingTicks"并确认这是唯一的,增加一个新的字符串值"PreserveVlanInfoInRxPacket",赋值1。

    c) Marvell Yukon 88E8055 PCI-E 千兆网卡

    "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\000"(where 000 is the number of the folder for the Marvel ethernet controller)

    增加DWORD:SkDisableVlanStrip:1

    3. 以Intel网卡为例,对网卡进行配置

    选择Intel网卡的本地连接,右键属性

    Figure 14

    点击“配置”按钮。

    Figure 15

    在VLAN选项卡中,加入任意一个VLAN,激活接口的VLAN TAG上送功能。此时可以把“本地连接”接口看成是一个Trunk接口。

    Figure 16

    配置完VLAN后,如果发现系统禁用了“本地连接”接口,则只要启用它,会看到网络连接中会出现一个新的子接口“本地连接2”。

    Figure 17

    在WireShark上查看抓取“本地连接”接口的报文。

    Figure 18

    可以看到已经可以抓到有VLAN TAG的报文了。

    Figure 19

    由于此时的子接口都是有VLAN属性的,所以无法当成正常的网卡来用。如果想要在抓VLAN包的同时,还能够与网络正常通信,只要再新建一个未标记的VLAN就行。

    Figure 20

    这时,会生成一个对应的子接口“本地连接3”,在这个接口上正确配置网络参数,就可以正常通信了。

    Figure 21