tcpdump连续抓包脚本(可以自动将dump分开存储)

tcpdump是Linux下最常用的抓包工具了。不过往往抓着抓着就忘了时间,导致整个dump文件有几GB大,根本无法用软件分析。当然可以用工具分割dump文件,不过那又要耗一番功付。

tcpdump自带的-C参数是可以抓到一定数据包后停止抓包,不过怎么用怎么不顺手,于是自己写了个抓包脚本。Shell用的不熟,只能写个最简单的。
原理是外面套一个循环,利用自带的-C参数,将一定数量数据包存成一个文件,然后给加个后缀_0 _1 ...

看代码:

# !/bin/bash

export TcpDump
= tcpdump
export SliPackeLen
= 68
export SliptCapPacket
= 500000

if  [  $# -ne 2  ] && [ $# -ne 3 ]
then
    echo 
" Usage: $0 <file> <CapCount> <expression> "
else
    
for  ((iLoop = 0 ; iLoop< $2 ; iLoop ++ ))
    
do
        echo 
""
        echo 
" > Capture $1_$iLoop.dmp($SliptCapFile) in $(($iLoop+1))/$2 files "
        echo 
" $TcpDump -i eth1 -s $SliPackeLen -c $SliptCapPacket -w $1_$iLoop.dmp $3 "
        
$TcpDump   - i eth1  - $SliPackeLen   - $SliptCapPacket   - $1_$iLoop .dmp  $3
    done
fi

echo 
""

export SliPackeLen=68    定义只抓数据包头的68字节
export SliptCapPacket
=500000    满50W数据包就新建一个文件


给脚本个名字叫 z-dump_68_50w.sh,以后就可以用:
./z-dump_68_50w.sh test 3 "host 192.168.0.12 and not udp"

来抓包了。蓝色的参数1是文件名,3是只生成3个分割后文件,这样抓到的就会以 test_0.dmp test_1.dmp test_2.dmp 存起来;另外需要注意的是过滤的参数部分,要用引号扩起来。

 

另外几个不同用途的脚本:

ContractedBlock.gif ExpandedBlockStart.gif 抓HTTP的
#!/bin/bash

export TcpDump
=tcpdump
export SliPackeLen
=65535
export SliptCapPacket
=100000

if [ $# -ne 2 ] && [ $# -ne 3 ]
then
    echo 
"Usage: $0 <file> <CapCount x32MB> <expression>"
else
    
for ((iLoop=0; iLoop<$2; iLoop++))
    
do
        echo 
""
        echo 
"> Capture $1_$iLoop.dmp($SliptCapFile) in $(($iLoop+1))/$2 files"
        echo 
"$TcpDump -i eth1 -s $SliPackeLen -c $SliptCapPacket -w WEB_$1_$iLoop.dmp port 80 and $3"
        
$TcpDump -i eth1 -$SliPackeLen -$SliptCapPacket -w WEB_$1_$iLoop.dmp port 80 and $3
    done
fi

echo 
""

 

ContractedBlock.gif ExpandedBlockStart.gif DNS的
#!/bin/bash

export TcpDump
=tcpdump
export SliPackeLen
=58
export SliptCapPacket
=1000000

if [ $# -ne 2 ] && [ $# -ne 3 ]
then
    echo 
"Usage: $0 <file> <CapCount x100w pkg> <expression>"
else
    
for ((iLoop=0; iLoop<$2; iLoop++))
    
do
        echo 
""
        echo 
"> Capture $1_$iLoop.dmp($SliptCapFile) in $(($iLoop+1))/$2 files"
        echo 
"$TcpDump -i eth1 -s $SliPackeLen -c $SliptCapPacket -w dns_$1_$iLoop.dmp udp port 53 and $3"
        
$TcpDump -i eth1 -$SliPackeLen -$SliptCapPacket -w dns_$1_$iLoop.dmp udp port 53 and $3
    done
fi

echo 
""

 

最后是个整理dump文件的脚本。每次抓到大量的文件,总不能就这么放在目录下吧,需要复制到另一个地方保存。不想每次都输一串命令,于是偷了点懒:

# !/bin/bash

# ls -l | grep dmp
du -sh   * .dmp

echo 
""
echo 
" move *.dmp -> D: (/mnt/WinD/dump/) "
mv -i
  * .dmp  /mnt/WinD/dump/
echo 
" OK. "

echo 
" ----------------------- "
df -hl | grep
 WinD
du -sh
  /mnt/WinD/dump/

注意修改目录 /mnt/WinD/dump/,我是将Windows分区挂在了/mnt/WinD/,需要改成你自己的。后面的几个命令是显示该分区的大小以及dump文件夹下文件占用的大小。

 

点这里下载文章相关脚本: tcpdump-sh.rar

转载于:https://www.cnblogs.com/bits/archive/2009/03/03/Linux_tcpdump.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值