Tcpdump指定时间或者指定大小进行循环抓取报文
背景:我们用tcpdump工具循环抓取网卡上的报文,我们会遇到如下情况:
1. 抓取报文后隔指定的时间保存一次;
2. 抓取报文后达到指定的大小保存一次;
本文就这两种情况给出tcpdump的使用方法
tcpdump -x udp port 6789 -i em2 -nn--------------------------------------->可输出从em2 网卡上的详细的数据包
-nn--------------------------------------> 可输出相应源IP地址到目的IP地址详细信息
tcpdump -X udp port 6789 -nn--------------------------------------------->可输出从端口6789的详细数据包,
1. 抓取报文后隔指定的时间保存一次:
tcpdump -i eth3 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap
这里解释下-G选项 后面接时间 单位为秒 本例中的时间为60秒
2. 抓取报文后达到指定的大小保存一次;
tcpdump -i eth3 -s0 -C 1 -Z root -w jiangsuyinhang.pcap
setsid tcpdump udp port 6789 -s0 -C 1 -Z root -w
udp_port_listener.pcap
&==========>>>>>后台启动监听端口6789-->udp数据包
-i 指定网卡名称
这里的-s0 表示每个报文的大小是接收到的指定大小,如果没有这个选项,则超过比如1500字节的报文,就会被切除1500字节以外的部分
-C(小写) 表示每当文件达到指定大小时进行重新保存一个新文件,单位是MB
-Z(小写) 表示下面的新文件也是用root权限来执行的,如果用-c时必须配合-Z(大写z).
-w(小写) 后面跟具体的文件名称
注意:这个命令行保存下来的文件名是jiangsuyinhang.pcap jiangsuyinhang.pcap0 jiangsuyinhang.pcap1……jiangsuyinhang.pcapN
以下为抓包脚本文件
#!/bin/bash
# ============================================
# TCPDump 循环抓包脚本(按网卡命名文件)
# 功能:按网卡名命名文件,支持按大小自动轮转
# 用法:./tcpdump_loop.sh [网卡名] [过滤条件]
# ============================================
# 配置参数
CAPTURE_DIR="./tcpdump" # 抓包文件保存目录
MAX_FILE_SIZE="100" # 单个文件大小限制(MB)
MAX_FILES="10" # 保留的文件数量
INTERFACE_NAME="" # 网卡名称
# 创建保存目录
mkdir -p ${CAPTURE_DIR}
# 参数处理:获取网卡名
if [ -n "$1" ]; then
INTERFACE_NAME="$1"
else
# 自动获取默认网卡
INTERFACE_NAME=$(ip route | grep default | awk '{print $5}' | head -n1)
echo "未指定网卡,使用默认网卡: ${INTERFACE_NAME}"
fi
# 过滤规则
FILTER_RULE="${2:-}"
# 以网卡名命名文件,加上时间戳避免冲突
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BASE_NAME="${INTERFACE_NAME}_${TIMESTAMP}"
echo "=========================================="
echo "TCPDump 循环抓包启动"
echo "=========================================="
echo "网卡: ${INTERFACE_NAME}"
echo "过滤规则: ${FILTER_RULE:-无}"
echo "单文件大小限制: ${MAX_FILE_SIZE}MB"
echo "最大保留文件数: ${MAX_FILES}"
echo "保存路径: ${CAPTURE_DIR}"
echo "文件前缀: ${BASE_NAME}.pcap"
echo "=========================================="
# 使用 tcpdump 循环抓包
# -i: 指定网卡
# -s 0: 抓取完整数据包
# -n -nn: 禁用DNS和端口名解析
# -C: 文件大小达到限制后切割(MB)
# -W: 最多保留文件数,超过自动覆盖
# -w: 输出文件路径
tcpdump -i ${INTERFACE_NAME} \
-s 0 \
-n \
-nn \
-C ${MAX_FILE_SIZE} \
-W ${MAX_FILES} \
-w "${CAPTURE_DIR}/${BASE_NAME}.pcap" \
${FILTER_RULE}

浙公网安备 33010602011771号