百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

如何在 Ubuntu 命令行中使用 Wireshark 进行抓包?

liuian 2025-07-02 22:19 5 浏览

Wireshark 是一个开源的网络协议分析工具,因其强大的抓包和分析功能而闻名。无论是调试网络问题、监控流量,还是进行安全审计,它都能派上用场。 通常,我们会在带有图形界面的系统中,通过 Wireshark 的窗口点击操作来完成抓包。但在 Ubuntu 的命令行环境中,尤其是服务器上,图形界面往往不可用。这时,Wireshark 的命令行工具 tshark 就闪亮登场了!

为什么要在命令行中使用 Wireshark 呢?原因很简单:灵活性与自动化。在服务器上,你可以用 tshark 捕获流量并保存到文件;在脚本中,你可以设置定时任务或条件触发抓包;甚至在远程调试时,你可以通过 SSH 登录服务器,直接操作。这样的场景是不是让你有点心动? 本文将从零开始,手把手教你在 Ubuntu 命令行中驾驭 Wireshark,探索网络世界的奥秘。

准备工作

在开始抓包之前,我们需要做一些准备工作,确保 Wireshark 在 Ubuntu 上安装并配置妥当。别担心,这部分很简单,但细节很重要!

安装 Wireshark

首先,确保你的 Ubuntu 系统是最新的,然后安装 Wireshark。打开终端,输入以下命令:

sudo apt update
sudo apt install wireshark -y

安装过程中弹出这个框,直接默认即可:

看到这里就代表安装成功

-y 参数会自动确认安装,避免手动输入 "yes"。安装过程中,系统可能会弹出一个配置窗口,询问是否允许非超级用户捕获网络包。出于安全考虑,我建议选择 "No",然后手动配置权限。 这样可以避免潜在的安全风险,同时保持对系统的控制。

配置抓包权限

Wireshark 需要访问底层网络接口,而这通常需要 root 权限。为了让普通用户也能抓包,我们需要调整权限设置。以下是具体步骤:

  1. 创建 wireshark 用户组

输入以下命令创建一个名为 wireshark 的用户组:

sudo groupadd wireshark
  1. 将你的用户添加到组中

将当前用户加入 wireshark 组,替换 $USER 为你的用户名,或者直接用 $USER 变量:

sudo usermod -a -G wireshark $USER
  1. 设置 dumpcap 权限

dumpcap 是 Wireshark 的抓包核心工具,我们需要让它对 wireshark 组开放:

sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

这里使用了 setcap 命令,为 dumpcap 设置特定的网络权限(cap_net_rawcap_net_admin),让它能在非 root 用户下抓包。

  1. 生效配置

配置完成后,注销并重新登录,或者重启系统,让组更改生效。

验证安装

为了确认一切就绪,运行以下命令检查 tshark 是否可用:

tshark -v

如果看到版本信息,恭喜你,安装成功了! 如果提示命令不存在,可能是安装过程中出了问题,检查是否漏装了 Wireshark 包。

基本抓包操作

准备工作完成后,我们终于可以开始抓包了!在命令行中,tshark 是 Wireshark 的灵魂,它几乎能实现图形界面中的所有功能。 下面,我们从基础操作开始。

列出网络接口

抓包的第一步是找到要监听的网络接口。运行以下命令:

tshark -D

你会看到类似这样的输出:

这些是系统中可用的网络接口。enp3s0 是有线网卡,docker0 是无线网卡,lo 是本地回环接口。记下你想抓包的接口名,比如 enp3s0

简单抓包

现在,让我们在 eth0 上开始抓包:

tshark -i enp3s0

-i 参数指定接口。运行后,终端会实时显示捕获到的数据包,格式类似于 Wireshark 的包列表,包括时间戳、源地址、目标地址和协议信息。按 Ctrl+C 停止抓包。

保存抓包文件

实时查看很有趣,但大多数时候,我们需要保存数据包以供后续分析。使用 -w 参数将抓到的包写入文件:

tshark -i enp3s0 -w capture.pcap

这会将所有捕获的包保存到 capture.pcap 文件中。你可以用 Wireshark 的图形界面打开这个文件,或者稍后用 tshark 分析。

添加抓包过滤器

网络流量往往很杂乱,我们通常只关心特定类型的包。tshark 支持 BPF(Berkeley Packet Filter)语法来过滤抓包。例如,只捕获 TCP 端口 80(HTTP)的流量:

tshark -i enp3s0 -f "tcp port 80"

-f 参数指定抓包过滤器。运行后,只有与端口 80 相关的包会被捕获,其他流量会被忽略。 再比如,只抓 ICMP(ping)流量:

tshark -i enp3s0 -f "icmp"

BPF 过滤器功能强大,支持多种条件组合,我们会在高级功能部分深入探讨。


高级功能:让抓包更智能、更高效

掌握了基本操作后,我们来玩点高级的!tshark 不仅能抓包,还能自动化、定制化你的工作流。

使用显示过滤器

除了抓包时的过滤,tshark 还支持 Wireshark 的显示过滤器语法,用于筛选已捕获的包。使用 -Y 参数:

tshark -i enp3s0 -Y "http"

这会只显示 HTTP 协议的包。注意,-f 是抓包时过滤(减少捕获量),而 -Y 是抓包后筛选(不影响捕获量,仅影响显示)。 例如,查看 DNS 请求:

tshark -i enp3s0 -Y "dns"

自动化抓包

手动抓包虽然灵活,但有些场景需要自动化。tshark 提供了多种自动停止条件,非常适合脚本化任务:

  • 捕获固定数量的包

-c 参数指定包数:

tshark -i enp3s0 -c 100 -w capture.pcap

捕获 100 个包后自动停止。

  • 按时间停止

-a 参数设置持续时间(单位:秒):

tshark -i enp3s0 -a duration:10 -w capture.pcap

抓包 10 秒后停止。

  • 按文件大小停止

设置文件大小上限(单位:KB):

tshark -i enp3s0 -a filesize:100 -w capture.pcap

文件达到 100KB 时停止。

多文件捕获(Ring Buffer)

对于长时间抓包,单个文件可能会变得很大。tshark 支持 ring buffer 模式,将流量分割成多个文件:

tshark -i enp3s0 -b files:5 -b duration:3600 -w capture.pcap

-b files:5 表示最多保留 5 个文件,-b duration:3600 表示每小时生成一个新文件。旧文件会被覆盖,像个循环缓冲区。

编写自动化脚本

我们可以将这些命令嵌入 Bash 脚本。例如,监控网络 10 分钟并保存结果:

#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
tshark -i enp3s0 -a duration:600 -w "capture_$TIMESTAMP.pcap"
echo "抓包完成,结果保存在 capture_$TIMESTAMP.pcap"

保存为 capture.sh,赋予执行权限(chmod +x capture.sh),然后运行 ./capture.sh。这会生成带时间戳的抓包文件。


分析抓包结果:从数据到洞察

虽然本文聚焦抓包,但简单聊聊如何分析是个不错的收尾。tshark 提供了一些基本分析功能。

读取捕获文件

-r 参数读取 .pcap 文件:

tshark -r capture.pcap

这会显示文件中所有包的详细信息。

应用显示过滤器

结合 -Y 筛选特定流量,例如查看 HTTP 请求:

tshark -r capture.pcap -Y "http.request"

或者统计 TCP 会话:

tshark -r capture.pcap -z conv,tcp

-z 参数支持多种统计功能,非常实用。

图形界面辅助

对于复杂分析,我建议用 Wireshark 图形界面打开 .pcap 文件。它提供了丰富的可视化工具,能更直观地展示流量模式。


常见问题与解决方法

抓包过程中难免遇到问题,以下是常见情况及应对策略:

  1. 权限不足
  2. 现象:提示 "You don't have permission to capture"
  3. 解决:检查是否加入 wireshark 组,或用 sudo 运行 tshark
  4. 接口不存在
  5. 现象:提示 "No such device exists"
  6. 解决:用 tshark -D 确认接口名,或用 ip link show 检查接口状态。
  7. 抓不到包
  8. 原因:接口无流量,或过滤器太严格。
  9. 解决:确保接口 UP(sudo ip link set eth0 up),检查过滤器语法。
  10. tshark 未找到
  11. 现象:提示 "command not found"
  12. 解决:确认安装(sudo apt install wireshark),检查 PATH(which tshark)。
  13. 文件无权限
  14. 现象:保存 .pcap 文件失败
  15. 解决:确保写入目录有权限(chmodchown)。

通过这篇文章,你已经从零到一掌握了在 Ubuntu 命令行中使用 Wireshark 抓包的技能。从安装配置到基本操作,再到高级自动化和故障排除,你现在可以自信地在终端中嗅探网络了!

命令行抓包不仅适用于无图形界面的环境,还为自动化任务打开了大门。无论是调试网络问题,还是监控服务器流量,tshark 都能助你一臂之力。快去试试吧,用它解锁网络世界的秘密,成为真正的网络探险家!

相关推荐

如何使用 Crontab 在 Linux 中安排 Cron 作业?

在Linux世界中,自动化运维和任务调度是提升效率的核心技能之一。而说到定时任务调度,「Cron」几乎是无人不知的标配工具。你可以用它按分钟、小时、天、周甚至月的粒度去执行脚本、备份、监控、同步...

迅雷发布下载MCP服务:一句话让AI自动找资源并下载

IT之家6月26日消息,迅雷今日发布下载MCP服务,号称“一句话即可让AI自动帮您下载”,该项服务同时支持PC版迅雷和NAS迅雷,现所有用户均可免费使用。目前迅雷MCP支持...

Linux学习大总结(纯干货)-ubuntu的安装与Linux基础操作

一、Linux简介Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工...

连载嵌入式Linux开发教程:初始Ubuntu

2.5创建和配置虚拟机2.5.1创建虚拟机双击桌面的VMwarePlayer启动快捷方式打开VMwarePlayer软件,运行界面如图2.15所示。点击“创建新虚拟机(N)”,可以创建一台虚拟机...

解决ubuntu关机后自动重启的问题(ubuntu 关机没反应)

1.打开/etc/apt/sources.list,把里面的所有源删除,怕有风险的话先backup;2.然后进入软件与更新,重新选择源和serverthenapt-getupdate。注:我也不...

Ubuntu 24.04设置自动登录(ubuntu设置root自动登陆)

在Ubuntu24.04中设置自动登录,可以通过修改GDM(GNOMEDisplayManager)的配置文件来实现。一、修改GDM配置文件1、打开终端:通过快捷键Ctrl+Alt+T打...

docker-compose备份数据库,在crontab定时任务中不生效解决方法

问题:数据库为PostgreSQL。由于数据库是用docker-compose运行,所以直接用docker-compose命令直接备份。测试终端直接运行备份没问题,将命令添加到crontab定时任务...

crontab定时任务执行时间与系统时间不一致解决方法

Ubuntucrontab定时任务执行时间与系统时间不一致(时区差)查看时间>#ll/etc/localtimelrwxrwxrwx1rootroot35Aug508:56...

如何在 Ubuntu 命令行中使用 Wireshark 进行抓包?

Wireshark是一个开源的网络协议分析工具,因其强大的抓包和分析功能而闻名。无论是调试网络问题、监控流量,还是进行安全审计,它都能派上用场。通常,我们会在带有图形界面的系统中,通过Wires...

Ubuntu 操作系统常用命令详解(ubuntu简单的命令)

UbuntuLinux是一款流行的开源操作系统,广泛应用于服务器、开发、学习等场景。命令行是Ubuntu的灵魂,也是高效、稳定管理系统的利器。本文按照各大常用领域,详细总结Ubuntu必学...

Linux系统如何设置开机自动运行脚本?

大家好,我是良许。在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务。在Windows下,我们有很多方法可以设置开机启动,但在Linux系统下我们需要如何操作呢?Linu...

【案例】Linux(Ubuntu)定时删除3天前文件夹

我公司有个OCR上传图片系统,每天会生成一个类似2025-05-10的文件夹,为了运维方便和硬盘空间的使用,我需要每天去删除之前的旧文件夹,比较麻烦。借助了Deepseek的帮助,将内容分享一下并给自...

解放你的双手,ubuntu定时自动备份MySQL数据库,亲测有效

1、新建一个文件夹存放备份的数据文件,根据个人需要放在合适的位置mkdir/home/cms_mysqlbackup2、创建脚本文件,我放在home文件夹了,命名为autobackup.shcd...

Linux 如何每 5、10、15 或 30 分钟运行一次 Cron 作业?

在Linux系统中,Cron是一个强大的工具,用于自动化重复性任务。通过合理配置Cron,用户可以轻松实现每5分钟、10分钟、15分钟或30分钟运行一次的定时任务。本文将深入探讨如...

运维实战:深度拆解Systemd定时任务原理,90%的人不知道的玩法

运维实战:深度拆解Systemd定时任务原理,90%的人不知道的高效玩法一、Systemd定时任务的核心原理Systemd定时任务是Linux系统中替代传统cron的现代化解决方案,通过...