背景
因为涉及媒体流相关测试时,经常会需要进行抓包,之前联调测试时出现一些偶先的问题,但是苦于没有抓包,只能观察日志分析或者重新抓包测试期望复现。
后来询问运维人员得知,已经启动了udp回溯,听到这个名词觉得很高大上,于是抱着求知的好奇心去了解了一下,原来是使用的命令在后台进行抓包,然后使用脚本对包进行移动放至每日的文件夹中。
实现
FIRST
首先需要启动一个抓包命令,这里需要几个条件:
- 服务器已安装
libpcap
及tcpdump
root
权限账户- 使用
&
后台运行,可选nohup
输出至nohup.out
命令如下:
nohup tcpdump -i any -s 0 -B 409600 udp dst portrange 50500-50506 -G 300 -w /home/tcpdumpfile_bak/%Y%m%d%H%M%S_SUPER8.cap -Z root &
这里可以不用指定端口区间,抓取服务器所有udp包,但是在我们的测试中,一般情况下存在非常多的udp流,所以针对不同的程序,可以设置不同的端口区间,通过文件名称进行区分。
参数解释:
- -i
- 指定网卡,值为 any 表示监听所有网卡
- -s
snaplen
,从每个数据包中读取的开始字节
- -B
- 数据包大小
- udp
- 只过滤udp包
- dst
- portrange 只过滤目的端口为区间内的包,同理 src portrange/port
- -G
second
表示生成文件的间隔时间
- -w
- 生成文件路径及名称
- -Z
user
指明使用用户
SECOND
其次使用脚本将每日抓包文件进行归类。
脚本如下:
#!/bin/bash
# date: 2023/6/20
BEFORE_TIME=$(date -d '1 day ago' +%Y%m%d) #get yesterday string
mkdir -p /home/tcpdumpfile_bak/$BEFORE_TIME #create date dir
find /home/tcpdumpfile_bak -name ''$BEFORE_TIME'*cap' -exec mv {} /home/tcpdumpfile_bak/$BEFORE_TIME \; #move cap file to date dir
通过sh backup.sh
将昨天及之前的文件进行移动至目的文件夹。
整个流程便已完成,还可以设置定时删除指定文件夹,实现保留多少天的udp包。