蛙蛙池塘
人生价值的最好体现就是做好本职工作...
posts - 176,  comments - 1499,  trackbacks - 53

蛙蛙推荐:用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,准备写下一篇

posted on 2008-04-29 22:20 蛙蛙池塘 阅读(1881) 评论(12)  编辑 收藏 所属分类: 综合区

FeedBack:
2008-04-29 22:31 | Microshaoft      
很好的工具(大日志的性能还是不行)
可以通过调用 COM API
MSUtil.LogQuery
或tlbimp 成 .Net interp dll

这样程序更好控制一些
以前我们用类似的vbs每天定时任务计划扫描IIS Log,审计是否有攻击
将疑似攻击的日志条目数据 into另一个文件或入数据库,然后人工审计
  回复  引用  查看    
#2楼 [楼主]
2008-04-29 22:32 | 蛙蛙池塘      
logparse分析一两G的IIS LOG还是很绰绰有余的,你日志多大?
  回复  引用  查看    
2008-04-29 22:47 | wingoo      
楼主,我很崇拜你啊...
  回复  引用  查看    
2008-04-29 22:49 | Microshaoft      
稍复杂的SQL性能就不太好了,例如: Group BY sustr(...)
只是相对与自己专门写日志分析程序,
可以通过一次扫描遍历做多种统计
感觉就像自己写程序实现SQLServer
我的日志一天8G
不同的统计分析,SQL是不一样,总之一句不可能搞定所有的,即:休想通过一次遍历搞定。
所以要写SQL多个语句分别执行N次这样耗的时间就多了,

  回复  引用  查看    
#5楼 [楼主]
2008-04-29 23:05 | 蛙蛙池塘      
@Microshaoft 4楼
Group BY sustr(...) 这个貌似sqlserver也用不上索引吧,你一次遍历做多种统计要用字符串多模匹配等算法吧(当然看需求),很麻烦的,logparser我没发现执行不了的语句的,最慢的半小时也就执行完了,我都直接group by tostring("yymmdd",time)都也没见多慢。

目前还没有你那种执行多次sql的需求,不过反正iis log都是文本的,自己写字符串处理程序也能满足需求,像network dump里好多二进制协议,用文本就不太好处理了。
  回复  引用  查看    
#6楼 [楼主]
2008-04-29 23:45 | 蛙蛙池塘      
@wingoo
谢谢捧场,呵呵,哥们又发了一篇,先呼呼了
@Microshaoft
刚写错了,是group by TO_STRING(time,'hh:mm'),我统计的是分时走势图。

  回复  引用  查看    
2008-04-30 16:49 | Zealic      
...
cap 文件格式很简单的。
晚上我把我写的 Cap 文件的工具类发给你参考参考。

PacketCapture.cs
PacketCaptureReader.cs
PacketCaptureWriter.cs

开放源代码,呵呵,可读可写,合并也没问题~~
要统计的话,直接读取后存到数据库,查询就 OK。
  回复  引用  查看    
#8楼 [楼主]
2008-04-30 16:52 | 蛙蛙池塘      
@Zealic
恩,很好,谢谢,支持哪些协议?
  回复  引用  查看    
2008-04-30 18:55 | Zealic      
@蛙蛙池塘

家里代码太老了,没有 PCap 那部分
要过三天才能给你弄来了
目前不支持任何协议 :)
都得自己解

呵呵
打算以后搞可以解 IP、TCP、UDP、ICMP 这些基本格式
不过将是另一个单独的库了
  回复  引用  查看    
#10楼 [楼主]
2008-05-01 14:34 | 蛙蛙池塘      
@Zealic
支持tcp/ip,http,sip就O了,别的我不用。
  回复  引用  查看    
2008-05-04 22:36 | Zealic      
@蛙蛙池塘
搞上去了,你可以去看看

  回复  引用  查看    
#12楼 [楼主]
2008-05-06 08:41 | 蛙蛙池塘      
@Zealic
链接贴错了吧,你那链接是你一个老帖子
  回复  引用  查看    
残荷听雨,梨花飞雪,落英缤纷时节。晓来谁染枫林醉?点点都是离人泪
活着,就是快乐!自信,就是美丽! 有人爱,就是幸福。
春天来了
但愿野百合也有春天

第一季度的计划


看完几本书:
《应用程序框架设计》
《lucene in action》
《P2P网络技术原理与系统开发案例》

<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

与我联系

常用链接

留言簿(39)

我参与的团队

我的标签

随笔分类

随笔档案

相册

朋友

搜索

  •  

积分与排名

  • 积分 - 365038
  • 排名 - 55

最新评论

阅读排行榜

评论排行榜

60天内阅读排行