You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Linux服务器中tcpdump每日自动保存24小时捕获流量为pcap文件的技术咨询

Linux服务器中tcpdump每日自动保存24小时捕获流量为pcap文件的技术咨询

当然可以搞定!这对蜜罐场景来说太实用了——毕竟按天归档流量数据,后续分析起来方便多了。我给你两种靠谱的实现方案,你按需选就行:

方案一:通过Cron定时启停tcpdump

这种方法逻辑简单直接,每天午夜自动启动新的tcpdump进程,同时关掉前一天的进程,保证每个pcap文件刚好记录24小时的流量。

  1. 写个启停脚本:创建一个脚本文件,比如/usr/local/bin/tcpdump_rotate.sh,把下面内容复制进去:
#!/bin/bash
# 终止我们启动的tcpdump进程(避免误杀其他进程)
pkill -f "tcpdump -i any -w /var/log/tcpdump/traffic_*.pcap"
# 创建流量保存目录(不存在就自动建)
mkdir -p /var/log/tcpdump
# 启动新的tcpdump,文件名带当天日期,比如traffic_2024-05-20.pcap
tcpdump -i any -w /var/log/tcpdump/traffic_$(date +%Y-%m-%d).pcap &

给脚本加执行权限:

chmod +x /usr/local/bin/tcpdump_rotate.sh
  1. 配置定时任务:运行crontab -e打开定时任务编辑器,添加这一行:
0 0 * * * /usr/local/bin/tcpdump_rotate.sh

这行的意思是每天午夜0点整执行脚本,切换新的pcap文件。

  1. 手动启动第一次:第一次得自己手动跑一遍脚本,让它开始捕获流量:
/usr/local/bin/tcpdump_rotate.sh

方案二:用tcpdump内置的滚动保存功能(更灵活)

如果你不想每天启停进程,tcpdump本身支持按时间自动切分文件,再配合cron清理旧文件就行,更省心:

  1. 启动带滚动规则的tcpdump:直接运行下面的命令,它会每24小时生成一个带日期的新pcap文件,不会覆盖之前的:
tcpdump -i any -G 86400 -w /var/log/tcpdump/traffic_%Y-%m-%d.pcap &

参数解释下:

  • -G 86400:每86400秒(也就是24小时)自动生成一个新文件
  • -w ...:指定保存路径和文件名格式,%Y-%m-%d会自动替换成当天的年-月-日

如果想让文件名更精确(比如带时分秒),可以改成:

tcpdump -i any -G 86400 -w /var/log/tcpdump/traffic_%Y-%m-%d_%H-%M-%S.pcap &
  1. 可选:定时清理旧文件:蜜罐流量可能很大,怕磁盘被占满的话,加个定时任务清理30天前的文件。运行crontab -e添加:
0 1 * * * find /var/log/tcpdump -name "traffic_*.pcap" -mtime +30 -delete

这会每天凌晨1点自动删除30天前的pcap文件。

几个重要提醒

  • 权限问题:tcpdump需要抓包权限,要么用root用户运行,要么给tcpdump加特殊权限(普通用户也能跑):
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
  • 磁盘监控:蜜罐的流量可能远超普通服务器,一定要定期检查磁盘空间,避免满盘影响服务器运行。
  • 捕获接口:上面用的-i any是抓所有接口的流量,如果你只需要特定接口(比如eth0),把-i any改成-i eth0就行。

备注:内容来源于stack exchange,提问作者Jan

火山引擎 最新活动