tcpdump抓取报文,并存储到指定大小文件中,一旦达到指定大小,立即退出

tcpdump -ennXXSs0 -i any -C 1 -Z root -W 2 -w /usr/admin/config/2.cap

  • - C(大写)表示每当文件达到指定大小时进行重新保存一个新文件,单位是MB(1 000 000 B)
  • - z (小写) 表示下面的新文件也是用root权限来执行的,如果用 - C 时必须配合-Z(大写Z,带root才不会报没权限错误)
  • - w 直接将分组写入文件中
  • - W 限制文件的个数,达到个数后开始从最早的文覆盖

 这是我遇到的一个需求,暂时没有办法破解,一旦达到大小都会重写文件,先记录在此,有更好的方法再补充。

暂时有一种方式

因为我的tcpdump实现是fork一个子进程,用execvp去执行的

所以,可以在父进程中,检测所保存的文件,比如my.pcap,如果my.pcap文件大小达到20M并出现my.pcap1时,杀死此子进程

最后解决:

tcpdump -ennXXSs0 -i any -C 20 -W 2 -Z root -w /usr/admin/config/2.cap -z packet_capture.sh

先解释:前面的-ennXXSs0不用介绍,百度一下,随地可见; 

1、-i(interface)  指定要抓取的接口,any就是抓 所有接口

2、-C(大写如上)把抓取到的报文写入文件,这个文件的大小设置为20M

3、-W(大写如上)执行要存几个文件,这里是存2个文件, 第一个是2.cap0,第二个是2.cap1

4、-Z root(大写如上)权限, 不加会报权限错误

5、-w(小写如上)要写入的 文件名,这里是写入/usr/admin/config/2.cap中

6、-z(小写如上)简单的说,它可以指定执行一些命令或者脚本, 这里是执行一个脚本

packet_capture.sh

=============================================================

#! /bin/sh
#tcpdump -ennXXSs0 -i any -C 20 -W 2 -Z root -w /usr/admin/config//2.cap -z /opt/JadeOS_3_0/util/packet_capture.sh
#$1   /usr/admin/config//2.cap0

cap=${1:19:5}                           # 2.cap

if [ -f "/tmp/$cap" ];then             # 判断/tmp/2.cap文件是否存在,存的是tcpdump的进程号
    cat /tmp/$cap | xargs kill -9   # 如果存在,那么把此tcpdump进程kill
    rm /tmp/$cap -rf                    # 然后删除/tmp/2.cap,注意为什么把-rf写在最后,这是个大坑啊,千万别犯错,后面解释     
fi

if [ -f $1 ];then                           # 判断/usr/admin/config//2.cap0报文存储文件是否存在,存在则2.cap0重命名2.cap
    mv $1 ${1:0:19}$cap
fi

rm ${1:0:19}${cap:0:5}1 -rf     # 最后将2.cap1删除

总结,当第一个文件2.cap0达到指定大小20M时,此时会执行一次脚本packet_capture.sh,同时报文会继续写到2.cap1。

脚本:kill当前tcpdump进程(就不会继续写2.cap1了),删除2.cap1,同时将2.cap0重命名为2.cap,这要就达到需求了,满20M立即退出。
============================================================

不加脚本之前,当2.cap0装满20M报文时, 会继续装2.cap1,当2. cap1满时,又从2.cap0开始重写,没完没了。 

问题:

1、为什么要将2.cap0重命名为2.cap?  有个tcpdump的函数会将2.cap中的报文读出并显示为易观看的格式,2.cap0会出错

2、为什么 rm /tmp/2.cap -rf  要将-rf写在最后?   原因是,如果rm -rf /tmp/2.cap这样写,当/tmp/2.cap 不存在时,你会后悔的,此文件目录的文件会全被删除,大坑啊,所以一定写在后面。

猜你喜欢

转载自blog.csdn.net/BBOYWISH/article/details/105119454