蛙蛙推荐:用LogParser分析WireShark的包
蛙蛙推荐:用LogParser分析WireShark的包
写代码也得会用一些常用的排查问题工具,像windbg,Wireshark,EnCase,LogParser,Sysinternals等,今天和大家分享和一个LogParser和Wireshark组合使用的例子。
场景:你在生产环境的多台机器用DumpCap抓了几十个小时的包,你要查看某个IP发来的包的具体情况,但是你不知道这么几百个cap文件里哪个里面有这个IP的请求。
分析:有人就说,这还不简单呀,直接用NetMon抓包,用LogParser分析不就O了吗?对,是对,可全是废话,咱的场景是用WireShark自带的DumpCap命令行工具抓的包,呵呵。首先想到的是WireShark是不是有自带的命令行工具可以对多个cap文件进行分析并输出文本结果,要是WireShark自带像LogParser那样的工具就一切都好说了,于是看WireShark的鸟语帮助,可惜找了半天没有。后来想也许WireShark有API可以自己写程序去读多个Cap文件,但是难度大了点儿,呵呵。于是去sf.net去找能分析WireShark的网络包的开源工具,结果还是没有。于是google一把,用了"WireShark LogParser","WireShark Analysis","WireShark NetMon"都没有什么有价值的结果,于是用"WireShark Convert to NetMon"来搜索,第一个结果集是http://forums.iis.net/p/1144815/1853546.aspx,里面看了看,WireShark里自带一个mergecap的命令行工具,可以合并多个cap文件,并制定最终文件的网络包格式,其中两种格式就是微软的netmon格式。看来还是看WireShark的自带的帮助文件不细心呀,自带这个工具就可以间接实现目标了。用这个工具把多个包合并成一个大的netmon格式的网络dump,然后用LogParse来查询就OK了。
关于如何利用网络解决技术问题,可参考我多年前那些的一篇帖子,呵呵
http://www.cnblogs.com/onlytiancai/archive/2005/07/01/184569.html
解决方案
mergecap的语法如下
mergecap -F netmon1 -w D:\temp\outfile.cap D:\temp\a.cap D:\temp\b.cap
可是我要合并好多个包有几十个,要我在命令行打几十个文件的路径,非急S不可,于是就开始上脚本,遍历网络包的目录,把里面要合并的包的路径拼接成一个MergCap参数。Python等就不用了,vbs足以,代码如下
Dir = "D:\temp\"
set ws=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
set folder=fso.getfolder(Dir)
set files=folder.files
for each file in files
data = data & """" &Dir & file.name & """ "
Next
Set fs =createobject("scripting.filesystemobject")
if (fs.fileexists(Dir & "2.txt")) Then
set f =fs.opentextfile(Dir & "\2.txt",8)
f.write data
f.writeline data
f.close
Else
set f=fs.opentextfile(Dir &"2.txt",2, true)
f.writeblanklines 2
f.write data
f.close
end If
完了,打开D:\temp\2.txt,前面加上mergecap -F netmon1 -w D:\temp\outfile.cap,在cmd模式下贴一下回车就O了。最后在D:\temp\目录下生成一个合并后的outfile.cap文件,它是符合netmon格式的,如果直接用logparse分析dumpcap抓的包,会告诉你格式不合法。
LogParse统计有多少来源IP的语法如下,看不懂的查帮助,呵呵
LogParser "SELECT srcip ,count(*) FROM D:\temp\*.cap group by srcip" -fmode:tcpip
over,准备写下一篇