33人参与 • 2025-08-08 • Linux
在网络故障排查、协议分析或网络安全检测中,抓包工具是不可或缺的"利器"。而tcpdump作为linux系统中历史最悠久、功能最强大的命令行抓包工具,至今仍是工程师的首选。本文将从基础操作到实战技巧,带你掌握用tcpdump捕获网络数据包的完整流程,尤其适合需要对接口板、设备通信进行分析的场景,同时将重点介绍如何通过后台命令避免远程终端关闭导致的抓包中断。
tcpdump是一款运行在linux/unix系统上的命令行网络抓包工具,它能实时捕获网络接口上传输的数据包,并按需求保存或解析。相比图形化工具(如wireshark),它的优势在于:
对于需要分析接口板、设备间通信的场景(如工业控制、物联网设备),tcpdump的轻量化特性使其成为最佳选择。
在开始抓包前,需准备以下环境和工具:
apt install tcpdump
或yum install tcpdump
安装)。以"捕获接口板网卡数据包并分析问题"为例,完整流程如下:
在抓包前,必须明确需要监控的网卡(如接口板连接的网卡)。通过以下命令查看所有网卡信息:
ifconfig # 或 ip addr(推荐,更全面)
执行后会显示类似以下的输出:
enp2s0: flags=4163<up,broadcast,running,multicast> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 ... eth0: flags=4163<up,broadcast,running,multicast> mtu 1500 inet 10.0.0.5 netmask 255.255.255.0 broadcast 10.0.0.255 ... docker0: flags=4099<up,broadcast,multicast> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ...
根据描述区分网卡类型:
enp2s0
);eth0
)、虚拟网卡(docker0
)等,需排除。根据场景需求选择以下抓包方式(在目标设备的终端中执行,如示教器终端),重点推荐远程操作时使用后台命令,避免终端关闭导致抓包中断:
适合短时间内复现问题的场景,命令格式:
tcpdump -i 网卡名称 -w 保存路径/文件名.cap
示例:捕获接口板网卡enp2s0
的数据包,保存到桌面的test.cap
:
tcpdump -i enp2s0 -w /root/desktop/test.cap
-i enp2s0
:指定监控enp2s0
网卡;-w /root/desktop/test.cap
:将数据包保存为.cap文件(不显示实时内容,避免占用资源)。若问题复现时间较长,需避免单个文件过大,可使用循环抓包(自动分割文件并限制数量):
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.cap
、name_01.cap
…递增。远程操控时,若不小心关闭终端,普通抓包进程会被终止。使用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
;&
:将进程放入后台运行,终端可继续执行其他命令。使用nohup
后台抓包后,需通过以下命令管理进程:
查看后台抓包进程:
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)。
停止后台抓包:
问题复现完成后,通过pid终止进程(必须正常停止,避免文件截断):
kill -9 12345 # 替换为实际pid
ps -ef | grep tcpdump
查看进程是否存在,或检查.cap文件大小是否随时间增长(ls -lh /root/desktop/*.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
导出文件:
/root/desktop/
;用wireshark分析:
将导出的.cap文件用wireshark打开(双击文件或在wireshark中选择"文件→打开"),即可分析数据包细节:
ip.addr == 192.168.1.100
);抓包文件被截断(wireshark提示错误)
kill -9
终止进程但文件未写完)。ctrl + c
(前台)或kill pid
(后台)正常停止;若文件已损坏,可用editcap
修复:editcap -f pcap 损坏的文件.cap 修复后的文件.cap
后台抓包进程意外终止
df -h
检查磁盘空间,确保/root/desktop/
有写入权限(chmod 777 /root/desktop
临时开放权限)。远程终端关闭后抓包停止
nohup
或&
,进程依赖终端会话。nohup [命令] &
启动抓包,脱离终端依赖。tshark -i enp2s0 -w 文件名.cap
)。以上就是linux使用tcpdump捕获网络数据包的详细步骤的详细内容,更多关于linux tcpdump捕获网络数据包的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论