wireshark抓http包不全或者抓不到包?

01 Wireshark 概述

Wireshark 是一款开源的网络协议分析器,支持数百种网络协议,能够实时捕获和详细解析网络流量。

它不仅适用于网络管理员和工程师进行故障排除和性能优化,也是安全专家进行入侵检测和数据分析的重要工具。

01 主要功能:

  • 数据包捕获:从网络接口实时捕获数据包。
  • 协议解析:提供对各种网络协议的深入解析。
  • 过滤和搜索:使用捕获过滤器和显示过滤器精确筛选感兴趣的数据。
  • 统计和可视化:生成多种统计报告和图表,帮助理解网络流量模式。

02 Wireshark 命令行工具 tshark

tshark 是 Wireshark 的命令行版本,提供了与图形界面相同的功能,并且在脚本编写、自动化任务和远程服务器上特别有用。

它能够捕获网络流量并进行解析,同时支持复杂的过滤器和输出格式化,非常适合需要高效处理大量数据包的场景。

01 基础命令

显示帮助信息:

tshark -h

列出可用的网络接口:

tshark -D

指定接口捕获:

tshark -i <interface>
  • <interface> 可以是接口编号(如 1)或接口名称(如 eth0)。

保存捕获文件:

tshark -w <output-file.pcap>

读取并解析已有捕获文件:

tshark -r <input-file.pcap>

02 高级命令

除了基础命令外,tshark 还提供了许多强大的高级功能,可以帮助用户更灵活地处理网络流量。

结合捕获过滤器:

tshark -f "tcp port 80"

应用显示过滤器:

tshark -Y "http.request.method == 'GET'"
  • 使用类似于Wireshark图形界面中的显示过滤器语法,进一步筛选感兴趣的数据包。

格式化输出:

tshark -T fields -e frame.time -e ip.src -e tcp.port
  • -T fields 指定输出为字段形式,后面可以跟多个字段名(如 frame.time、ip.src 等),用于提取特定信息。

统计信息生成:

tshark -z io,stat,1
  • -z 选项用于生成各种统计报告,如按时间间隔统计流量。

03 自动化脚本

利用 tshark 的强大功能,可以编写自动化脚本来定期捕获和分析网络流量。

以下是一个简单的Shell脚本示例,演示如何定时运行 tshark 并将结果保存到指定目录中:

#!/bin/bash
设置变量
INTERFACE="eth0"
CAPTURE_DIR="/path/to/capture/directory"
FILENAME="capture_$(date +%Y%m%d_%H%M%S).pcap"
CAPTURE_DURATION=60  # 捕获持续时间为60秒


创建捕获目录(如果不存在)
mkdir -p "$CAPTURE_DIR"


开始捕获
echo "开始捕获流量..."
tshark -i $INTERFACE -a duration:$CAPTURE_DURATION -w "$CAPTURE_DIR/$FILENAME"


echo "捕获完成,文件已保存至 $CAPTURE_DIR/$FILENAME"

Cron作业计划表:可以将上述脚本添加到Cron作业计划表中,实现定时自动执行。例如,每天凌晨2点运行一次:

0 2 * * * /path/to/script.sh

05 远程捕获

对于无法直接访问的远程服务器,可以通过SSH隧道或其他方式使用 tshark 进行远程捕获。

通过SSH远程捕获:

ssh user@remote_host "sudo tshark -i eth0 -w -" | tshark -r -
  • 上述命令在远程主机上启动 tshark 捕获流量,并通过管道传输给本地的 tshark 进行解析。

配置RPCAPD服务:

  • 在某些情况下,可以在远程服务器上安装并配置 rpcapd 服务,允许通过RPCAP协议远程访问捕获设备。

03 数据包捕获技巧

01 选择合适的捕获接口

在开始捕获网络流量之前,正确选择捕获接口至关重要。不同的网络接口会捕获不同类型的流量,因此了解每个接口的作用可以帮助我们更精准地定位问题。

物理网卡:

  • 这是最常见的捕获接口类型,直接连接到外部网络。
  • 适用于捕获进出该网络的所有流量。

环回接口(Loopback Adapter):

  • 环回接口用于捕获本地主机内部的流量,例如应用程序之间的通信。
  • 在某些操作系统上,默认情况下不启用环回接口的捕获功能,需要额外配置(如安装Npcap驱动程序)。

虚拟网络接口:

  • 常见于虚拟化环境中,如VMware、VirtualBox等。
  • 可以捕获虚拟机与宿主机之间或多个虚拟机之间的流量。

无线网卡:

  • 适用于捕获Wi-Fi网络中的流量。
  • 某些无线网卡支持混杂模式(Promiscuous Mode),可以捕获所有可见的无线流量,而不仅仅是属于自己的帧。

02 设置捕获选项

为了确保捕获过程高效且符合需求,合理设置捕获选项是必要的。

限制捕获长度:

tshark -s <size>
  • <size> 参数指定每个数据包的最大捕获字节数,减少文件大小并提高性能。通常默认值为65535字节。

应用捕获过滤器:

tshark -f "tcp port 80"
  • 使用BPF语法定义捕获条件,仅捕获符合条件的数据包,避免不必要的数据占用磁盘空间和处理时间。

多接口同时捕获:

tshark -i any
  • -i any 选项表示捕获来自所有可用接口的流量,适用于需要全面监控的情况。

分割大文件:

tshark -b files:<number> -b filesize:<size>
  • -b 选项用于创建环形缓冲区,将捕获文件按数量或大小分割,便于管理和分析。

环形缓冲区(Ring Buffer):

tshark -b files:5 -b filesize:100M -w capture_ring.pcap
  • 上述命令会创建一个包含最多5个文件、每个文件最大100MB的环形缓冲区,当达到上限时旧文件会被新文件覆盖。

03 多机协作捕获

在复杂的网络环境中,单台机器可能无法捕捉到全部关键流量。此时,可以通过多台设备协同工作来实现更全面的流量监控。

远程捕获:

  • 如前所述,通过SSH隧道或其他方式使用 tshark 或 rpcapd 服务进行远程捕获。
  • 将捕获的数据流式传输到中央服务器进行集中分析,确保所有相关流量都被记录下来。

分布式捕获工具:

  • 使用专门设计的分布式捕获工具(如MultiReaderNetCap)可以同时从多个源点收集流量,并合并成单一PCAP文件供后续分析。

04 高效管理捕获文件

随着捕获时间的增长,生成的PCAP文件可能会变得非常庞大,难以管理和分析。

压缩文件:

  • 使用压缩工具(如gzip、bzip2)减小文件体积,节省存储空间。
  • 对不再频繁访问的历史捕获文件进行压缩归档。

定期清理:

  • 制定合理的保留策略,定期删除过期或不再需要的捕获文件。
  • 自动化脚本可以帮助自动执行清理任务,保持系统整洁有序。

索引和标记:

  • 创建详细的文件命名规则,包括日期、时间、捕获地点等信息,方便快速查找。
  • 使用标签或元数据描述每个捕获文件的内容,辅助后期检索。

数据库存档:

  • 对于长期保存的需求,考虑将捕获文件导入专用数据库(如Elasticsearch),结合全文搜索功能实现高效查询。

04 过滤器详解

01 捕获过滤器(Capture Filters)

捕获过滤器用于在数据包到达Wireshark或tshark之前筛选出感兴趣的流量,从而减少不必要的数据包进入分析工具。捕获过滤器使用的是BPF(Berkeley Packet Filter)语法,它直接作用于网络接口级别。

基本语法:

  • host:匹配特定IP地址的流量。
host 192.168.1.100
  • port:匹配特定端口号的流量。
port 80
  • net:匹配特定子网的流量。
net 192.168.1.0/24
  • proto:匹配特定协议的流量。
proto tcp

组合条件:

  • 使用逻辑运算符(and、or、not)构建复杂条件。
tcp and host 192.168.1.100 or port 80

示例:

  • 捕获来自特定IP的所有HTTP流量:
tshark -f "tcp port 80 and host 192.168.1.100"

02 显示过滤器(Display Filters)

显示过滤器用于从已捕获的数据包中筛选出感兴趣的流量,并在Wireshark界面或tshark输出中展示。与捕获过滤器不同,显示过滤器是在捕获完成后应用的,因此不会影响捕获效率。

字段表达式:

  • IP地址和端口:
ip.addr == 192.168.1.100 || tcp.port == 80
  • 协议字段:
http.request.method == "GET"

函数和操作符:

  • 字符串匹配:
contains "example.com"
  • 数值比较:
frame.len > 1500
  • 正则表达式匹配:
matches ".*example.*"

内置函数:

  • 计算长度:
len(tcp.payload) > 100
  • 提取子字段:
http.host contains "example.com"

示例:

  • 显示所有DNS查询响应:
dns.flags.response == 1

03 颜色规则与书签

为了更直观地分析大量数据包,Wireshark允许用户创建自定义的颜色规则和添加书签,以突出显示重要事件并方便后续查阅。

创建颜色规则:

在Wireshark中,通过“查看”->“颜色规则”可以定义新的颜色规则。

例如,将所有HTTP GET请求标记为蓝色:

http.request.method == "GET"

添加书签:

当发现一个重要事件时,可以在该行右键点击选择“添加书签”,输入描述信息。

书签会出现在左侧边栏中,便于快速跳转到关键位置。

04 常用过滤器示例

捕获FTP流量:

tshark -f "tcp port 21"

显示所有HTTPS流量:

http2 || tls

查找含有特定字符串的HTTP请求:

http.request.uri contains "login"

过滤出TCP三次握手过程:

tcp.flags.syn == 1 && tcp.flags.ack == 0

分析DNS解析失败的情况:

dns.flags.response == 1 && dns.flags.rcode != 0

05 高级过滤技巧

对于需要更精细控制的场景,可以结合多种过滤器和高级功能来实现复杂的需求。

嵌套过滤器:

  • 将多个过滤条件嵌套在一起,形成更复杂的表达式。
(http.request.method == "POST" && http.host == "api.example.com") or (dns.flags.response == 1)

统计分析:

  • 使用统计对话框生成各种报告,如按时间间隔统计流量、分析协议分布等。
Statistics -> IO Graphs

导出选定数据包:

  • 在Wireshark中,可以选择某些数据包并通过“文件”->“另存为”导出为新的PCAP文件,方便进一步分析。

阅读剩余
THE END