摘要:在网络管理和故障排除领域,Wireshark 是一款不可或缺的强大工具。无论是排查复杂的网络问题、优化性能还是进行安全审计,Wireshark 都能发挥重要作用。
号主:老杨丨11年资深网络工程师,更多网工提升干货,
晚上好,我的网工朋友。
在网络管理和故障排除领域,Wireshark 是一款不可或缺的强大工具。无论是排查复杂的网络问题、优化性能还是进行安全审计,Wireshark 都能发挥重要作用。
但不少朋友可能只停留在使用Wireshark图形界面的基本功能上,而忽略了其丰富的命令行工具(如tshark)、高效的捕获技巧以及强大的过滤器语法。
这些高级特性不仅极大地提升了工作效率,还为自动化脚本编写和大规模数据分析提供了可能性。今天就把这些高级用法一次性分享给你,快给你的Wireshark升升级吧!
今日文章阅读福利:《 Wireshark抓包全集 》
再分享一个抓包全集给你!Wireshark抓包全集(85种协议、类别的抓包文件),私信我,发送暗号“抓包全集”,即可获得资源。
Wireshark 是一款开源的网络协议分析器,支持数百种网络协议,能够实时捕获和详细解析网络流量。
它不仅适用于网络管理员和工程师进行故障排除和性能优化,也是安全专家进行入侵检测和数据分析的重要工具。
01 主要功能:
tshark 是 Wireshark 的命令行版本,提供了与图形界面相同的功能,并且在脚本编写、自动化任务和远程服务器上特别有用。
它能够捕获网络流量并进行解析,同时支持复杂的过滤器和输出格式化,非常适合需要高效处理大量数据包的场景。
01 基础命令
显示帮助信息:
tshark -h列出可用的网络接口:
tshark -D指定接口捕获:
tshark -i 可以是接口编号(如 1)或接口名称(如 eth0)。保存捕获文件:
tshark -w读取并解析已有捕获文件:
tshark -r02 高级命令
除了基础命令外,tshark 还提供了许多强大的高级功能,可以帮助用户更灵活地处理网络流量。
结合捕获过滤器:
tshark -f "TCP port 80"使用标准的BPF(Berkeley Packet Filter)语法来限制捕获的数据包类型。应用显示过滤器:
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 等),用于提取特定信息。统计信息生成:
-z 选项用于生成各种统计报告,如按时间间隔统计流量。利用 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.sh05 远程捕获
对于无法直接访问的远程服务器,可以通过SSH隧道或其他方式使用 tshark 进行远程捕获。
通过SSH远程捕获:
ssh user@remote_host "sudo tshark -i eth0 -w -" | tshark -r -上述命令在远程主机上启动 tshark 捕获流量,并通过管道传输给本地的 tshark 进行解析。配置RPCAPD服务:
在某些情况下,可以在远程服务器上安装并配置 rpcapd 服务,允许通过RPCAP协议远程访问捕获设备。01 选择合适的捕获接口
在开始捕获网络流量之前,正确选择捕获接口至关重要。不同的网络接口会捕获不同类型的流量,因此了解每个接口的作用可以帮助我们更精准地定位问题。
物理网卡:
这是最常见的捕获接口类型,直接连接到外部网络。适用于捕获进出该网络的所有流量。环回接口(Loopback Adapter):
环回接口用于捕获本地主机内部的流量,例如应用程序之间的通信。在某些操作系统上,默认情况下不启用环回接口的捕获功能,需要额外配置(如安装Npcap驱动程序)。虚拟网络接口:
常见于虚拟化环境中,如VMware、VirtualBox等。可以捕获虚拟机与宿主机之间或多个虚拟机之间的流量。无线网卡:
适用于捕获Wi-Fi网络中的流量。某些无线网卡支持混杂模式(Promiscuous Mode),可以捕获所有可见的无线流量,而不仅仅是属于自己的帧。02 设置捕获选项
为了确保捕获过程高效且符合需求,合理设置捕获选项是必要的。
限制捕获长度:
tshark -s 参数指定每个数据包的最大捕获字节数,减少文件大小并提高性能。通常默认值为65535字节。应用捕获过滤器:
tshark -f "tcp port 80"使用BPF语法定义捕获条件,仅捕获符合条件的数据包,避免不必要的数据占用磁盘空间和处理时间。多接口同时捕获:
tshark -i any-i any 选项表示捕获来自所有可用接口的流量,适用于需要全面监控的情况。分割大文件:
tshark -b files: -b filesize:-b 选项用于创建环形缓冲区,将捕获文件按数量或大小分割,便于管理和分析。环形缓冲区(Ring Buffer):
tshark -b files:5 -b filesize:100M -w capture_ring.pcap上述命令会创建一个包含最多5个文件、每个文件最大100MB的环形缓冲区,当达到上限时旧文件会被新文件覆盖。03 多机协作捕获
在复杂的网络环境中,单台机器可能无法捕捉到全部关键流量。此时,可以通过多台设备协同工作来实现更全面的流量监控。
远程捕获:
如前所述,通过SSH隧道或其他方式使用 tshark 或 rpcapd 服务进行远程捕获。将捕获的数据流式传输到中央服务器进行集中分析,确保所有相关流量都被记录下来。分布式捕获工具:
使用专门设计的分布式捕获工具(如MultiReader、NetCap)可以同时从多个源点收集流量,并合并成单一PCAP文件供后续分析。04 高效管理捕获文件
随着捕获时间的增长,生成的PCAP文件可能会变得非常庞大,难以管理和分析。
压缩文件:
使用压缩工具(如gzip、bzip2)减小文件体积,节省存储空间。对不再频繁访问的历史捕获文件进行压缩归档。定期清理:
制定合理的保留策略,定期删除过期或不再需要的捕获文件。自动化脚本可以帮助自动执行清理任务,保持系统整洁有序。索引和标记:
创建详细的文件命名规则,包括日期、时间、捕获地点等信息,方便快速查找。使用标签或元数据描述每个捕获文件的内容,辅助后期检索。数据库存档:
对于长期保存的需求,考虑将捕获文件导入专用数据库(如Elasticsearch),结合全文搜索功能实现高效查询。04 过滤器详解01 捕获过滤器(Capture Filters)
捕获过滤器用于在数据包到达Wireshark或tshark之前筛选出感兴趣的流量,从而减少不必要的数据包进入分析工具。捕获过滤器使用的是BPF(Berkeley Packet Filter)语法,它直接作用于网络接口级别。
基本语法:
host:匹配特定IP地址的流量。host 192.168.1.100port:匹配特定端口号的流量。port 80net:匹配特定子网的流量。net 192.168.1.0/24proto:匹配特定协议的流量。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 == 103 颜色规则与书签
为了更直观地分析大量数据包,Wireshark允许用户创建自定义的颜色规则和添加书签,以突出显示重要事件并方便后续查阅。
创建颜色规则:
在Wireshark中,通过“查看”->“颜色规则”可以定义新的颜色规则。
例如,将所有HTTP 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 != 005 高级过滤技巧
对于需要更精细控制的场景,可以结合多种过滤器和高级功能来实现复杂的需求。
将多个过滤条件嵌套在一起,形成更复杂的表达式。(http.request.method == "POST" && http.host == "api.example.com") or (dns.flags.response == 1)统计分析:
使用统计对话框生成各种报告,如按时间间隔统计流量、分析协议分布等。Statistics -> IO Graphs来源:网络工程师俱乐部