导读:本期聚焦于小菜鸟创作的《如何在Ubuntu上使用tshark进行数据包分析?常用命令与实战技巧详解》,敬请观看详情。tshark是Wireshark官方提供的命令行抓包工具,在Ubuntu服务器环境下没有图形界面也能完成数据包的捕获与分析工作。本文从安装配置讲起,介绍tshark的基本抓包命令、BPF过滤器与显示过滤器的区别和写法,并结合HTTP请求提取、TCP流跟踪、统计分析等实际场景给出可复用的命令示例,同时说明非root用户抓包的权限配置方法,帮助你快速掌握命令行下的网络排查思路。

tshark是Wireshark项目自带的命令行抓包工具,它把Wireshark的核心解析引擎搬到了终端里。在Ubuntu服务器或者远程SSH环境中,没有图形界面可用,此时tshark几乎成了数据包分析的唯一选择。它不仅支持实时抓包,还能离线分析pcap文件,配合过滤器和统计功能,排查网络问题的效率并不比图形界面低。本文将从安装、基础抓包、过滤语法到几个典型实战场景,完整梳理tshark的用法。

如何在Ubuntu上使用tshark进行数据包分析?常用命令与实战技巧详解

一、安装tshark与基础环境配置

在Ubuntu上安装tshark非常简单,它包含在wireshark-common软件包体系中,直接通过apt安装即可:

sudo apt update
sudo apt install tshark -y
tshark -v

安装过程中系统会询问是否允许非超级用户抓包,选择“是”会自动创建wireshark用户组。如果当时跳过了,也可以手动把当前用户加入wireshark组,避免每次抓包都要加sudo:

sudo usermod -aG wireshark $USER
# 重新登录后生效,验证抓包权限
tshark -c 1

加入用户组后需要注销重新登录才能生效。如果不想改权限,也可以一直使用sudo tshark执行,但要注意输出重定向时文件属主会变成root,后续读取时可能需要sudo chown调整属主。

安装完成后建议先熟悉几个基础参数:-i指定网卡,-c限制抓包数量,-w写入pcap文件,-r读取pcap文件。例如tshark -i eth0 -c 100 -w /tmp/test.pcap表示在eth0网卡上抓100个包并保存到文件。用tshark -D可以列出系统上所有可用的抓包接口,包括蓝牙、VPN虚拟网卡等,确认网卡名称时很常用。

二、捕获过滤器与显示过滤器的区别

tshark有两套完全不同的过滤语法,初学者最容易在这里混淆。捕获过滤器用在-f参数后面,遵循BPF语法,在抓包阶段生效,内核只把匹配的数据包交给tshark,性能开销小,但语法能力有限。显示过滤器用在-Y参数后面,是Wireshark的专有语法,在抓包完成后对已解析的字段做筛选,表达能力强大得多。

BPF语法的典型写法如下:

# 只抓指定主机的流量
sudo tshark -i eth0 -f "host 192.168.1.100"

# 只抓80端口的TCP流量
sudo tshark -i eth0 -f "tcp port 80"

# 排除SSH自身的流量,避免抓包时被自己的会话刷屏
sudo tshark -i eth0 -f "not port 22"

显示过滤器则基于协议字段名,字段名可以通过tshark -G fields查看完整列表,或者直接参考Wireshark官方文档。常见写法包括:

# 筛选HTTP状态码为500的响应
tshark -r capture.pcap -Y "http.response.code == 500"

# 筛选指定IP且指定端口的所有包
tshark -r capture.pcap -Y "ip.addr == 192.168.1.100 && tcp.port == 443"

# 筛选DNS查询中包含某域名的包
tshark -r capture.pcap -Y "dns.qry.name contains \"example\""

实际工作中推荐组合使用:先用捕获过滤器缩小抓包范围,减少磁盘占用,抓完后再用显示过滤器做精细分析。比如排查一台Web服务器的慢请求,可以先用-f "tcp port 80 or tcp port 443"只抓Web流量,保存文件后再用-Y逐层筛选。

三、实战场景:提取HTTP请求与跟踪TCP流

tshark最实用的能力之一是字段提取。通过-T fields配合-e参数,可以把感兴趣的字段直接输出成表格,非常适合做日志分析和自动化处理。比如提取一段时间内所有HTTP请求的源IP、目标主机、请求路径和状态码:

tshark -i eth0 -Y "http.request" \
  -T fields -e frame.time \
  -e ip.src \
  -e http.host \
  -e http.request.uri \
  -e http.user_agent \
  -E separator=, -E quote=d

其中-E separator=,指定逗号分隔,-E quote=d给字段加双引号,输出结果可以直接导入Excel或者交给awk、grep做二次处理。这在排查异常爬虫、统计接口调用频率时非常高效,比人工翻图形界面快得多。

另一个高频场景是跟踪TCP流。当你定位到一个可疑报文后,往往需要还原整条会话的内容,-z参数提供了丰富的统计和跟踪功能:

# 跟踪第一条TCP流的ASCII内容
tshark -r capture.pcap -q -z follow,tcp,ascii,0

# 统计各协议数据包分布
tshark -r capture.pcap -q -z io,phs

# 按会话统计流量,快速找出流量最大的连接
tshark -r capture.pcap -q -z conv,tcp

-z conv,tcp输出的会话统计表在实际排查中特别有用,按字节数排序后,一眼就能看到哪条连接消耗了最多带宽,再结合-z follow查看具体内容,基本可以判断是正常业务高峰还是异常外发流量。

四、定时抓包与生产环境注意事项

生产环境中经常需要长时间监控,直接无限制抓包会迅速耗尽磁盘空间。tshark提供了多个缓冲控制参数:-a filesize:51200表示单个文件达到50MB后自动停止,-b files:10 -b filesize:20480则是环形缓冲模式,保留最近10个20MB的文件,旧文件自动被覆盖,配合cron定时任务可以构建轻量的持续监控方案。

# 环形缓冲抓包,最多保留10个文件,每个20MB
sudo tshark -i eth0 -f "tcp port 80" \
  -b files:10 -b filesize:20480 \
  -w /var/capture/web.pcap

还有几点经验值得注意。第一,远程SSH排查时务必排除22端口,否则终端输出会被自己的SSH流量淹没;第二,高流量环境下优先使用捕获过滤器而不是显示过滤器,显示过滤器仍然会解析所有到达的包,CPU占用差异明显;第三,写文件抓包时不要同时加-V参数输出详细解析,两者同时开启会拖慢速度,需要看解析内容时再离线读取。

掌握tshark之后,你会发现命令行下的抓包分析反而更灵活:命令可以写进脚本、结果可以管道处理、远程服务器无需桌面环境。把它和BPF捕获过滤器、显示过滤器以及-T fields字段提取组合起来,基本能覆盖日常网络排障的绝大多数需求。

Ubuntutshark数据包分析修改时间:2026-09-10 00:50:41

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260910/53703.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。