用tcpdump截获msn信息
上一篇 /
下一篇 2008-07-06 21:34:10
/ 个人分类:Shell
用tcpdump截获msn信息
#!/bin/sh
echo "" > temp.1
echo "" > temp.3
#此处没有限制多少个msn数据包
tcpdump -f -lnx -s 0 host 192.168.0.1 and port 1863 > temp.0
lines=`cat temp.0 | wc -l`
line=1
while [ $line -le $lines ]
do
#此处获取时间收发ip等信息
memo=`sed -n ''"$line"'p' temp.0 | gawk '{if (!~/^0x/)print ,,,,,,,,,,," "}'`
memo=$"aaaaaaaa"
if [ "$memo" = "aaaaaaaa" ]
then
#截取数据包中数据部分
ōut=`sed -n ''"$line"'p' temp.0 | cut -c"11-14, 16-19, 21-24, 26-29, 31-34, 36-39, 41-44, 46-49"`
echo -n "$out" >> temp.1
else
echo "" >> temp.1
ōut=`sed -n ''"$line"'p' temp.0 | gawk '{if (!~/^0x/)print ,,,,,,,,,,," "}'`
echo -n "$out" >> temp.1
fi
line=`expr $line + 1`
done
echo "" >> temp.1
#删除空行和前两行
sed '/^&/d' temp.1 | sed '1,2d' > temp.2
lines=`cat temp.2 | wc -l`
line=1
while [ $line -le $lines ]
do
#获取要现实的内容
TIME=`sed -n ''"$line"'p' temp.2 | gawk '{print }' | gawk -F "." '{print }'`
FROM=`sed -n ''"$line"'p' temp.2 | gawk '{print }'`
TO=`sed -n ''"$line"'p' temp.2 | gawk '{print }'`
#根据标志位确定并截取msn数据
DATA0=`sed -n ''"$line"'p' temp.2 | awk '{print }' | gawk -F "0d0a0d0a" '{print }' | sed '/^0d0a$/d' | sed 's/../%&/g'`
#将截获的utf-8十六进制数交由perl的URI::Escape模块处理并显示中英文
DATA=`perl -e "use URI::Escape; print uri_unescape('$DATA0');"`
isnull=`echo $DATA | wc -m`
if [ $isnull -gt 1 ]
then
echo "$ FROM $ TO $ DATA: $"
fi
line=`expr $line + 1`
done
rm -f temp.*
相关阅读:
- sed基础概念 (ainux, 2008-5-12)
- 在第n行插入内容(sed) (ainux, 2008-5-12)
- 关于变量赋值 (ainux, 2008-5-12)
- Linux SHELL if 命令参数说明 (ainux, 2008-5-12)
- 对文本的行列操作 (ainux, 2008-5-16)
- ()和{ }还是不一样的 (ainux, 2008-5-18)
- sed附加文本 (ainux, 2008-5-19)
- shell的内置命令 (thefirstred, 2008-5-20)
- linux性能检测结果发到指定的邮箱脚本 (ainux, 2008-6-20)
- 一个生成CTL文件的SHELL (huozheba, 2008-6-25)
收藏
举报
TAG:
Shell