蛙蛙池塘  
人生价值的最好体现就是做好本职工作...
公告
  • 残荷听雨,梨花飞雪,落英缤纷时节。晓来谁染枫林醉?点点都是离人泪
    活着,就是快乐!自信,就是美丽! 有人爱,就是幸福。
    春天来了
    但愿野百合也有春天

    第三季度的计划



    木了
    晚上一个人看会儿《读者乡土人文版》,听会儿广播挺不错的,想起了三年前在石家庄没电脑的日子,时光飞逝呀,现在笔记本都用上了,以前从没想过,确实得知足常乐。
日历
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
统计
  • 随笔 - 249
  • 文章 - 2
  • 评论 - 2367
  • 引用 - 75

导航

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我参与的团队

我的标签

随笔分类

随笔档案

相册

朋友

积分与排名

  • 积分 - 543323
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

 

蛙蛙推荐:用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 蛙蛙池塘 阅读(3164) 评论(13)  编辑 收藏 网摘 所属分类: 综合区
评论:
  • #1楼  Microshaoft       Posted @ 2008-04-29 22:31
    很好的工具(大日志的性能还是不行)
    可以通过调用 COM API
    MSUtil.LogQuery
    或tlbimp 成 .Net interp dll

    这样程序更好控制一些
    以前我们用类似的vbs每天定时任务计划扫描IIS Log,审计是否有攻击
    将疑似攻击的日志条目数据 into另一个文件或入数据库,然后人工审计
      回复  引用  查看    

  • #2楼[楼主]  蛙蛙池塘       Posted @ 2008-04-29 22:32
    logparse分析一两G的IIS LOG还是很绰绰有余的,你日志多大?   回复  引用  查看    

  • #3楼  wingoo       Posted @ 2008-04-29 22:47
    楼主,我很崇拜你啊...   回复  引用  查看    

  • #4楼  Microshaoft       Posted @ 2008-04-29 22:49
    稍复杂的SQL性能就不太好了,例如: Group BY sustr(...)
    只是相对与自己专门写日志分析程序,
    可以通过一次扫描遍历做多种统计
    感觉就像自己写程序实现SQLServer
    我的日志一天8G
    不同的统计分析,SQL是不一样,总之一句不可能搞定所有的,即:休想通过一次遍历搞定。
    所以要写SQL多个语句分别执行N次这样耗的时间就多了,
      回复  引用  查看    

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

    目前还没有你那种执行多次sql的需求,不过反正iis log都是文本的,自己写字符串处理程序也能满足需求,像network dump里好多二进制协议,用文本就不太好处理了。
      回复  引用  查看    

  • #6楼[楼主]  蛙蛙池塘       Posted @ 2008-04-29 23:45
    @wingoo
    谢谢捧场,呵呵,哥们又发了一篇,先呼呼了
    @Microshaoft
    刚写错了,是group by TO_STRING(time,'hh:mm'),我统计的是分时走势图。
      回复  引用  查看    

  • #7楼  Zealic       Posted @ 2008-04-30 16:49
    ...
    cap 文件格式很简单的。
    晚上我把我写的 Cap 文件的工具类发给你参考参考。

    PacketCapture.cs
    PacketCaptureReader.cs
    PacketCaptureWriter.cs

    开放源代码,呵呵,可读可写,合并也没问题~~
    要统计的话,直接读取后存到数据库,查询就 OK。
      回复  引用  查看    

  • #8楼[楼主]  蛙蛙池塘       Posted @ 2008-04-30 16:52
    @Zealic
    恩,很好,谢谢,支持哪些协议?
      回复  引用  查看    

  • #9楼  Zealic       Posted @ 2008-04-30 18:55
    @蛙蛙池塘

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

    呵呵
    打算以后搞可以解 IP、TCP、UDP、ICMP 这些基本格式
    不过将是另一个单独的库了
      回复  引用  查看    

  • #10楼[楼主]  蛙蛙池塘       Posted @ 2008-05-01 14:34
    @Zealic
    支持tcp/ip,http,sip就O了,别的我不用。
      回复  引用  查看    

  • #11楼  Zealic       Posted @ 2008-05-04 22:36
    @蛙蛙池塘
    搞上去了,你可以去http://www.cnblogs.com/zealic/archive/2008/05/01/1107942.html">看看
      回复  引用  查看    

  • #12楼[楼主]  蛙蛙池塘       Posted @ 2008-05-06 08:41
    @Zealic
    链接贴错了吧,你那链接是你一个老帖子
      回复  引用  查看    

  • #13楼  黛波波[未注册用户] Posted @ 2008-11-14 10:48
    前辈们说的甚是精彩,可惜我是才上路的菜鸟,WIRESHARK都看不是很懂,是真的虚心求教,不要鄙视我哟,给点建议   回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1176893




相关文章:

相关链接:
 
Copyright © 蛙蛙池塘 Powered by: 博客园 模板提供:沪江博客