tshark处理大报文的注意事项

栏目: 编程工具 · 发布时间: 7年前

内容简介:我在这篇文章中曾经说明了如何使用wireshark的lua脚本进行大报文的切割,其实这里面隐含存在着一个问题。由于lua脚本的执行是通过关于大报文的情形要分为离线和在线两种情况。1,针对在线的情况,如果仅仅是抓报,不做分析可以使用dumpcap来执行。类似这种形式

我在这篇文章中曾经说明了如何使用wireshark的 lua 脚本进行大报文的切割,其实这里面隐含存在着一个问题。由于lua脚本的执行是通过 tshark -X lua_script:createNewPcap.lua -r xx.pcap -q 这种形式来执行的,那么就存在一个wireshark遗留很久的问题。那就是,当报文很大的时候,通过tshark进行读取会导致其占用的内存大小超过本机内存,这个时候就会报memory erro的错误。关于为什么会有这样的问题,在 这篇文章 中有详细的论述。具体原因就是wireshark需要内存来存储报文的元数据信息以及流的状态信息,以用于报文的重组,我们看到的wireshark显示的重组信息,都是由这些信息来提供的。举个例子来说https中的server hello响应信息一般有4k字节左右,在以太网中是分包传输的。我们打开wireshark之所以能够看到wireshark将这些分开的报文组装成为最后的server hello信息以及certificate信息,就是因为wireshark在内存中存储了流的状态信息以及一些元信息,当然报文也是存在内存中的,方便后续报文的重组。内存的使用情况主要取决于报文的数量,报文类型(大报文还是小报文片),以及wireshark具体的设置。

关于大报文的情形要分为离线和在线两种情况。

1,针对在线的情况,如果仅仅是抓报,不做分析可以使用dumpcap来执行。类似这种形式 dumpcap -i 1 -w test.pcap 。如果需要更多分析过滤作用的话,tshark是提供了-b参数来解决在线长时间抓取报文的问题。据说有人曾连续抓了一个星期200G 的报文没有出现问题,参见 这里 。可以通过man tshark找到-b参数的使用方法。类似这样

tshark -i eth0 -Y “http.host == \“baidu\””-w baidu.pcap -b filesize:1000000 ,当然-b参数的使用是在1.12版本之后的,具体有没有成为release版本,参考 这里

2,针对离线的情况,由于tshark并没有像在线的那样提供了-b参数来清除内存中的数据,wireshark官方在 这里 介绍了几种方法,比如增加内存,包括物理内存和虚拟内存等等,个人觉得增加虚拟内存是比较理想的方法,虽然损失了处理的速度,但是至少内存可以扩展的比较大来应对大报文的情形。当然也可在libpcap等库的基础上来编写处理程序,那么耗时较长,在 这里 给出了一种解决的办法。

如果有好的解决办法的,欢迎多交流。

本文为CSDN村中少年原创文章,转载记得加上小尾巴偶,博主链接这里。


以上所述就是小编给大家介绍的《tshark处理大报文的注意事项》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Responsive Web Design

Responsive Web Design

Ethan Marcotte / Happy Cog / 2011-6 / USD 18.00

From mobile browsers to netbooks and tablets, users are visiting your sites from an increasing array of devices and browsers. Are your designs ready? Learn how to think beyond the desktop and craft be......一起来看看 《Responsive Web Design》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具