Wireshark抓包环境的工作原理与使用技巧总结

date
Jan 21, 2021
slug
2021-01-21-wireshark-monitor
status
Published
tags
WiFi
Wireshark
无线通信
网络
summary
本文总结了有线与无线网络抓包背后的工作原理,以及使用Wireshark进行抓包的基本操作流程选型。
type
Post

Wireshark基本介绍

  • Wireshark是全球使用最广泛的开源抓包软件(其前身为Ethereal),是一个通用的网络数据嗅探器和协议分析工具。1998年开始以GPL开源许可证发布。
  • 主要功能:
    • 分析网络底层协议;
    • 解决网络故障问题;
    • 找寻网络安全问题;
  • 跨平台支持很好,可以在Windows、MACOS、Linux/Unix系统上运行;
  • 官方网站:www.wireshark.org;
  • 与Wireshark相关/类似的其他软件:
    • Sniffer
    • Omnipeek
    • Fiddler,HTTPWatch,这两个工具主要用来抓包分析HTTP协议;
    • 科来网络分析系统
  • Wireshark中的抓包数据可以支持保存为很多种其他类型的抓包文件,这样这些抓包数据保存后就可以在其他的抓包工具软件中打开并分析。此外还可以使用wireshark提供的导出功能,对抓包序列/文件中的数据进行过滤以后,导出到一个新的抓包文件中;

有线网卡的混杂工作模式

  • 有线网卡包含两种工作模式:正常工作模式,混杂模式。
  • 在设备网卡正常的工作模式下,当网卡收到的数据包中所包含的MAC地址与自己的MAC地址不一致的话(除了广播包,广播包的MAC地址是固定的FF:FF:FF:FF:FF:FF),就会选择把这个数据包丢弃掉,这样对于网卡的驱动以及驱动更上层的操作系统内核、应用程序而言,根本就看不到不属于自己的网络数据包;因此对于网卡的正常工作模式,网卡只会把属于自己的网络包以及网卡收到的广播包向上提交,把其他的网络包直接丢弃;
    • 这样的处理可以显著的提升设备系统和应用的处理性能,试想如果网卡收到大量不属于自己的网络包,全部提交给系统内核和应用程序来处理的话,大量的CPU计算周期会浪费在这些没有意义的事情上,严重影响系统本身处理正常工作的性能;
    • 在这种工作模式下,使用wireshark对网卡收到的数据包进行抓包的话,自然也就只会抓到发给自己的包和当前网络下收到的广播包;
  • 如果希望能够在wireshark上抓到网络上其他设备的数据包,就需要能够让网卡进入混杂模式。
    • 并非所有的网卡都能够支持混杂模式。
    • Windows系统中提供了libpcap和winPcap驱动,能够通过这个驱动很方便的在wireshark的软件界面上把网卡的工作模式切换为混杂模式。
  • 在网卡的混杂工作模式下,网卡能够捕获到达其网络端口的所有数据流量。无论这些流量是否发给自己的(即无论这些流量的目的地址是什么),都不会丢弃,而是直接发给系统内核和应用层来做进一步的处理,这样运行在系统应用层的wireshark上就可以抓取并显示出来不属于自己的网络包。
  • 因此结论就是:如果想要wireshark上抓取到不属于自己的网络包,就必须要有一个能够支持混杂模式的网卡。

无线网卡的监听工作模式

  • 无线网卡有四种工作模式:
    • Master Mode:主要用于无线接入点AP对外提供无线接入以及路由管理的功能服务,可以简单地理解为我们的无线路由器就工作在Master模式下。
    • Managed Mode:当无线客户端与无线接入点AP之间连接的时候,无线客户端就工作在Manged mode下。
    • Ad Hoc Mode:用于两台无线设备之间建立P2P直连的情况。
    • Monitor Mode:用于监控无线网络的流量。在这种工作模式下,无线客户端自身停止收发数据,专心监听在空气中某个信道上正常传输的数据包。
      • 如果想要使用Wireshark来监听空气中传输的无线数据包时,就必须要使自己的无线网卡工作在这种模式下。当然并非所有的无线网卡都能够支持Monitor Mode。
      • 也称为RFMON Mode。
  • 如上所述,如果要通过wireshark来监听空气中传输的WiFi无线包,必须要有一个能够支持Monitor Mode的无线网卡,然后设置该网卡为Monitor Mode,并指定要监听的wifi信道,无线网卡将会开始专心的监听该信道中正在传输的所有数据包,解析后推送给wireshark显示出来。
  • 无线网卡的Monitor模式与有线网卡的混杂模式比较:
    • 有线网卡设置为混杂模式后,只能监听到自己所加入的网络中传输的数据包;
    • 而无线网卡的Monitor模式,根本就不需要无线网卡加入网络就能够进行监听,而且可以监听到指定信道所有网络中正在传输的无线包,因此无线网络相比有线网络,要不安全的多;
    • 无线网卡的混杂模式?理论上无线网卡在加入某个AP以后,也应该可以监听到这个AP网络中的所有流量,但是实际上无线网卡根本就没有必要加入AP,就能够监听到这个信道中所有网络的流量,权限要大得多,所以无线网卡的混杂模式就没有太大意义了。

抓包环境分类及其工作原理

  • 有线网络下的抓包环境分类
    • 本机环境:即对发给本机网卡的所有网络流量或者本机网卡发出的所有流量进行抓包分析;
      • 即只对自己的流量进行抓包分析,这是最基本最简单的一种流量监控和分析的方式;
    • 集线器环境:同一冲突域,可以对所有连接到同一集线器上的所有设备的进出流量进行抓包;
      • 流经集线器的所有网络包都会被发送到集线器上的每一个端口上,因此这种情况下对网络流量进行嗅探实施起来最方便,只需要把网络嗅探器连接到集线器上的任意一个空闲端口上即可;
      • 但因为集线器的半双工通信模式,连接到集线器的设备只能有一个设备在发送数据,传输效率比较低,现在已经很少见使用集线器的网络环境了;所以这种环境现在基本上只存在于理论分析中;
    • 交换机环境
      • 交换机是当前网络环境中应用最常见的连接设备类型。
      • 交换机工作在物理链路层,因此可以通过MAC地址来唯一的标识连接到其上的设备节点,交换机内部维护有一个MAC地址寻址表CAM(其中保存在MAC地址和端口的映射信息),交换机在收到一个数据包以后,通过读取这个数据包的头部信息中包含的MAC地址,然后查CAM来决定把这个包发到哪个连接端口上。
      • 因此当把网络嗅探器连接到交换机上的某个端口,将会只能收到发给自己的数据包和广播类型的数据包。
      • 那么对于在一个交换机环境中如果要对这个网络中的流量进行嗅探的话,主要有以下几种方法:
        • 端口镜像
        • 前提条件:
          • 交换机能够支持端口镜像设置;
          • 有权限设置交换机的端口镜像功能;
          • 交换机上有空闲的端口接入网络嗅探器;
        • 在交换机上设置端口镜像后,交换机在转发流量的时候就会把这个流量拷贝一份同时转发给网络嗅探器所在的端口;
        • 各个交换机的端口镜像支持以及设置方式均不同;
    • 集线器接出
    • 使用网络分流器
    • ARP欺骗攻击
      • 不需要特殊的交换机设置的权限;
      • ARP攻击软件:Cain&Abel;
      • 通过在嗅探机上安装ARP欺骗/攻击工具, 通过发送ARP应答伪装自己为流量接收机器的MAC地址,这样原本发给目标机的流量就会被发给嗅探机,借此接收到本不属于自己的流量。
    • MAC泛洪
      • 不需要特殊的交换机设置的权限;
      • 在嗅探机上发送包含有大量MAC地址的包出去,交换机接收到以后会把新的MAC地址填写到CAM表中,但是CAM表的长度是有限的,如果MAC地址太多的话就会把原先正常的MAC表项冲掉。这样这些机器的流量因为在CAM标志找不到对应的对应项,就会被转发到所有的端口上,从而到达监听流量的目的。

Wireshark使用的一些技巧总结

  • 可使用工具栏上的放大镜按钮对抓包窗口显示内容进行放大缩小的控制。
  • 增加/修改列:
    • 给抓包窗口增加列:在具体要增加的信息项上点击右键,选择“应用为列”,就可以把这个选型增加到新的列上;
    • 修改列的信息:在抓包列表窗口对应列的Header上点击右键,选择Edit Column,就可以修改指定列的信息,例如列的名称;
  • Packet Time相关设置
    • 修改抓包创建的时间显示格式:视图---时间显示格式;
    • 修改抓包窗口中的time base,即在抓包的序列中,选择一个包作为起始包,其他包的时间都以这个包的时间作为参考:在需要设置作为参考的包上点击右键--设置/取消设置时间参考;
    • 在同一个抓包序列中可以设置多个时间参考;
  • 名字解析的功能
    • wireshark在MAC、IP地址、端口的各个层次都提供了名字解析的功能,名字解析的功能开启后,显示在抓包窗口中的地址就不再是简单的MAC或者IP地址,以及端口号,而是可以直接自动识别为对应的厂商字符串(MAC地址)、公网服务器名称(IP地址)和传输层协议名称(端口号),这样查看抓包列表就会更方便简洁一些;
    • 名字解析功能默认情况下只打开了MAC层的解析,如果需要开启IP地址和传输层协议名称的解析,可以在捕获---选项---选项---Name Resolution或者编辑---首选项--Name Resolution中开启IP地址和传输层名称的解析;
  • 数据包的标记
    • 为方便对数据包进行分析,可以使用mark/unmark的功能对选择的数据包进行高亮显示和取消高亮显示;
    • 还可以通过对话着色功能对不同类型的协议使用不同的颜色来自动标记;
  • 多个数据包文件的合并操作
    • 如果多次抓包得到多个抓包文件,可以使用wireshark的文件---合并功能把多个抓包文件做合并处理,显示在一起进行分析;
  • wireshark的抓包自动保存设置
    • 可以通过设置捕获---选项---output来设置抓包数据自动保存到文件的设置,这样在wireshark中捕获到的抓包数据就会自动的写入参数指定的文件中;并且可以支持按照固定抓包文件大小、抓包时间长度、抓包数量等设置来自动创建新的抓包文件;
  • 过滤器
    • wireshark有两种过滤器设置,两种过滤器的语法还不一样:
    • 抓包过滤器:在捕获---选项---Capture Filter中进行设置;这种情况下设置的过滤器会自动把不符合过滤器的包直接丢弃;
      • 抓包过滤器使用的是基于libpcap/wincap库的BPF(Berkley Packet Filter)语法;
      • 类型Type:host,net,port;
      • 方向Dir:src,dst;
      • 协议Proto:ether,ip,tcp,udp,http,ftp
      • 逻辑运算符:&&,||,!,==;
    • 显示过滤器:也就是在抓包列表显示窗口上方的过滤器设置;这种情况下设置的过滤器不会针对丢弃掉不符合过滤规则的包,而只是会隐藏显示;
      • 比较操作符:==,!=,>,<,>=,<=;
      • 逻辑操作符:and,or,xor,not;
      • ip地址:ip.addr,ip.src,ip.dst;
      • 端口:tcp.port,tcp.srcport,tcp.dstport;
      • 协议过滤:arp,ip,icmp,udp,tcp,bootp,dns;

参考资料

  • 《Wireshark数据包分析实战(第2版)》
 

© Pavel Han 2020 - 2022