当前位置: 首页 > news >正文

用 tcpdump 捕获网络数据包

在网络故障排查、协议分析或网络安全检测中,抓包工具是不可或缺的"利器"。而tcpdump作为Linux系统中历史最悠久、功能最强大的命令行抓包工具,至今仍是工程师的首选。本文将从基础操作到实战技巧,带你掌握用tcpdump捕获网络数据包的完整流程,尤其适合需要对接口板、设备通信进行分析的场景,同时将重点介绍如何通过后台命令避免远程终端关闭导致的抓包中断。

一、什么是tcpdump?为什么选择它?

tcpdump是一款运行在Linux/Unix系统上的命令行网络抓包工具,它能实时捕获网络接口上传输的数据包,并按需求保存或解析。相比图形化工具(如Wireshark),它的优势在于:

  • 轻量高效:无需图形界面,可直接在远程服务器或嵌入式设备上运行;
  • 灵活可控:通过命令参数精确过滤数据包,避免无关数据干扰;
  • 适合长期监控:支持后台运行和循环抓包,适合长时间记录网络行为。

对于需要分析接口板、设备间通信的场景(如工业控制、物联网设备),tcpdump的轻量化特性使其成为最佳选择。

二、准备工作:环境与工具

在开始抓包前,需准备以下环境和工具:

  1. 操作终端
    • 远程登录工具(如MobaXterm):用于连接目标设备(如样机后端);
    • 目标设备:运行Linux系统,已安装tcpdump(默认多数Linux发行版自带,若未安装可通过apt install tcpdumpyum install tcpdump安装)。
  2. 目标对象
    • 需监控的网络接口(如接口板网卡);
    • 待复现的网络问题(如通信超时、数据异常等)。

三、实战步骤:用tcpdump捕获接口板网卡数据

以"捕获接口板网卡数据包并分析问题"为例,完整流程如下:

步骤1:识别目标网卡名称

在抓包前,必须明确需要监控的网卡(如接口板连接的网卡)。通过以下命令查看所有网卡信息:

ifconfig  # 或 ip addr(推荐,更全面)

执行后会显示类似以下的输出:

enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255...eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 10.0.0.5  netmask 255.255.255.0  broadcast 10.0.0.255...docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255...

根据描述区分网卡类型:

  • 接口板网卡:通常是直接连接外部设备的物理网卡(如示例中的enp2s0);
  • 其他网卡:如用户网卡(eth0)、虚拟网卡(docker0)等,需排除。

步骤2:执行抓包命令(含后台运行方案)

根据场景需求选择以下抓包方式(在目标设备的终端中执行,如示教器终端),重点推荐远程操作时使用后台命令,避免终端关闭导致抓包中断

方式1:基础抓包(单次捕获,适合短时操作)

适合短时间内复现问题的场景,命令格式:

tcpdump -i 网卡名称 -w 保存路径/文件名.cap

示例:捕获接口板网卡enp2s0的数据包,保存到桌面的test.cap

tcpdump -i enp2s0 -w /root/Desktop/test.cap
  • 参数说明:
    • -i enp2s0:指定监控enp2s0网卡;
    • -w /root/Desktop/test.cap:将数据包保存为.cap文件(不显示实时内容,避免占用资源)。
方式2:循环抓包(长期监控,自动分割文件)

若问题复现时间较长,需避免单个文件过大,可使用循环抓包(自动分割文件并限制数量):

nice -n -10 tcpdump -i 网卡名称 -C 单个文件大小(M) -W 最大文件数 -w 保存路径/前缀名.cap

示例:监控enp2s0,单个文件最大30MB,最多保存20个文件(总容量约600MB):

nice -n -10 tcpdump -i enp2s0 -C 30 -W 20 -w /root/Desktop/name.cap
  • 参数说明:
    • nice -n -10:提高进程优先级,避免抓包被系统低优先级调度;
    • -C 30:单个文件达到30MB时自动创建新文件;
    • -W 20:最多生成20个文件(超出后覆盖最早的文件);
    • 保存的文件名将按name_00.capname_01.cap…递增。
方式3:后台抓包(推荐远程操作,防止终端关闭中断)

远程操控时,若不小心关闭终端,普通抓包进程会被终止。使用nohup命令可让抓包脱离终端独立运行,即使关闭终端也能继续:

# 基础格式:nohup [抓包命令] > 日志路径 2>&1 &
nohup tcpdump -i 网卡名称 -w 保存路径/文件名.cap > /var/log/tcpdump.log 2>&1 &

示例:后台捕获enp2s0的数据包,日志输出到/var/log/tcpdump.log

nohup tcpdump -i enp2s0 -w /root/Desktop/background_cap.cap > /var/log/tcpdump.log 2>&1 &
  • 参数说明:
    • nohup:忽略终端关闭信号(SIGHUP),保证进程持续运行;
    • > /var/log/tcpdump.log 2>&1:将抓包过程中的日志(如错误信息)输出到指定文件,避免默认写入nohup.out
    • 末尾&:将进程放入后台运行,终端可继续执行其他命令。

步骤3:管理后台抓包进程(关键操作)

使用nohup后台抓包后,需通过以下命令管理进程:

  1. 查看后台抓包进程

    ps -ef | grep tcpdump
    

    输出类似:

    root      12345  67890  0 16:00 ?        00:00:01 tcpdump -i enp2s0 -w /root/Desktop/background_cap.cap
    

    其中12345为进程ID(PID)。

  2. 停止后台抓包
    问题复现完成后,通过PID终止进程(必须正常停止,避免文件截断):

    kill -9 12345  # 替换为实际PID
    

步骤4:复现问题并确认抓包状态

  1. 复现问题:执行抓包命令后(无论前台还是后台),在设备上操作以复现需要分析的问题(如接口板通信异常)。
  2. 确认抓包状态
    • 前台抓包:终端阻塞状态表示正常运行;
    • 后台抓包:通过ps -ef | grep tcpdump查看进程是否存在,或检查.cap文件大小是否随时间增长(ls -lh /root/Desktop/*.cap)。

步骤5:导出与分析抓包文件

  1. 确认文件:执行以下命令,检查.cap文件是否正常保存:
ls -lh /root/Desktop/*.cap

若显示类似以下内容,说明保存成功:

-rw-r--r-- 1 root root  25M Aug 10 15:30 /root/Desktop/test.cap
-rw-r--r-- 1 root root  40M Aug 10 16:10 /root/Desktop/background_cap.cap
  1. 导出文件

    • 通过远程工具(如MobaXterm)的文件浏览器导航到/root/Desktop/
    • 右键点击目标.cap文件,选择"Download"导出到本地电脑。
  2. 用Wireshark分析
    将导出的.cap文件用Wireshark打开(双击文件或在Wireshark中选择"文件→打开"),即可分析数据包细节:

    • 查看通信双方的IP、端口;
    • 过滤特定协议(如TCP、UDP)或关键词(如ip.addr == 192.168.1.100);
    • 定位异常数据包(如重传、超时、错误校验等)。

四、常见问题与解决方案

  1. 抓包文件被截断(Wireshark提示错误)

    • 原因:未正常停止tcpdump(如强制关闭终端、用kill -9终止进程但文件未写完)。
    • 解决:必须通过Ctrl + C(前台)或kill PID(后台)正常停止;若文件已损坏,可用editcap修复:
      editcap -F pcap 损坏的文件.cap 修复后的文件.cap
      
  2. 后台抓包进程意外终止

    • 原因:目标目录磁盘空间不足,或权限不足导致无法写入文件。
    • 解决:抓包前用df -h检查磁盘空间,确保/root/Desktop/有写入权限(chmod 777 /root/Desktop临时开放权限)。
  3. 远程终端关闭后抓包停止

    • 原因:未使用nohup&,进程依赖终端会话。
    • 解决:远程操作时务必用nohup [命令] &启动抓包,脱离终端依赖。

五、扩展工具推荐

  • Wireshark:图形化分析工具,支持过滤、统计、协议解析,适合分析.cap文件;
  • editcap:Wireshark附带的命令行工具,用于修复被截断的.cap文件;
  • tshark:tcpdump的图形化替代工具,支持更丰富的过滤语法(tshark -i enp2s0 -w 文件名.cap)。

学习资源:

(1)管理教程
如果您对管理内容感兴趣,想要了解管理领域的精髓,掌握实战中的高效技巧与策略,不妨访问这个的页面:

技术管理教程

在这里,您将定期收获我们精心准备的深度技术管理文章与独家实战教程,助力您在管理道路上不断前行。

(2)软件工程教程
如果您对软件工程的基本原理以及它们如何支持敏捷实践感兴趣,不妨访问这个的页面:

软件工程教程

这里不仅涵盖了理论知识,如需求分析、设计模式、代码重构等,还包括了实际案例分析,帮助您更好地理解软件工程原则在现实世界中的运用。通过学习这些内容,您不仅可以提升个人技能,还能为团队带来更加高效的工作流程和质量保障。

http://www.dtcms.com/a/318760.html

相关文章:

  • RTSP播放器技术详解:功能支持、平台覆盖与快速集成指南
  • PostgreSQL 强制索引:当重复数据让优化器“失明”时的解决方案
  • centos系统sglang单节点本地部署大模型
  • Sklearn 机器学习 数据降维PCA 自己实现PCA降维算法
  • 如何打造一支AI时代下的IT团队,为企业战略目标快速赋能
  • Java面试宝典:JVM的垃圾收集算法
  • MCU中的晶振(Crystal Oscillator)
  • 【Zephyr】02_从零教你开发芯片级ADC驱动(HAL层篇)
  • 每日五个pyecharts可视化图表-bars(6)
  • 嵌入式硬件中MOSFET基本原理与实现
  • 基于 Socket.IO 实现 WebRTC 音视频通话与实时聊天系统(Spring Boot 后端实现)
  • C语言中级_动态内存分配、指针和常量、各种指针类型、指针和数组、函数指针
  • MATLAB科研数据可视化
  • cuda编程笔记(13)--使用CUB库实现基本功能
  • 嵌入式硬件中MOSFET基本控制详解
  • 嵌入式硬件学习(十一)—— platform驱动框架
  • OpenAI 开源模型 GPT-OSS深度拆解:从1170亿参数到单卡部署,重构AI开源生态
  • 亚马逊采购风控突围:构建深度隐匿的环境安全体系
  • 360纳米AI、实在Agent、CrewAI与AutoGen……浅析多智能体协作系统
  • LabVIEW实验室测试框架
  • 《深入浅出 Django ORM:设计理念与惰性查询实现详解》
  • 炫酷圆形按钮调色器
  • 共识算法介绍
  • macOS 彻底卸载 Python 的完整指南
  • Mac+Chrome滚动截图
  • mac中多版本JDK配置和切换
  • 数据推荐|标贝科技方言自然对话数据集 构建语音交互新基建
  • 两种格式数据介绍——bin 、 yuv文件
  • 【C语言】文件操作全解析
  • 【感知机】感知机(perceptron)模型与几何解释