如何编写http层嗅探器

时间:2014-01-05 12:53:04

标签: tcp wireshark tshark bro

我想写一个应用程序层嗅探器(SMTP / ftp / http)。

基于我的搜索,首先(也许最难!)步骤是重新组装嗅探连接的tcp流。

事实上,我需要的是像wireshark的“跟随TCP流”选项,但我需要一个工具,它可以在实时界面上自动完成。据我所知,Tshark可以自动从保存的pcap文件中提取TCP流数据(link),但不能从实时接口中提取。 Tshark可以在现场接口上做吗???

据我所知,TCPflow可以完全按照我的意愿行事,但是,它无法处理IP碎片整理和SSL连接(我希望在拥有服务器私钥的情况下分析SSL内容)。

最后,我还尝试了兄弟网络监视器。虽然它提供了TCP连接列表(conn.log),但我无法获得TCP连接内容。

欢迎任何有关所提及工具或任何其他有用工具的建议。

提前致谢,Dan。

2 个答案:

答案 0 :(得分:1)

perl Net :: Inspect库可能对您有所帮助。它还附带了一个tcpudpflow,它可以将tcp和udp流写入单独的文件,类似于tcpflow。它适用于pcap文件或可以进行实时捕获。该库处理IP分段。它还附带一个httpflow工具来提取HTTP请求和响应(包括解压缩,分块编码......)。它目前不处理SSL。

作为这个库的作者,我不认为提取TCP流是最难的部分,HTTP解析器(排除解压缩,包括分块模式)几乎是IP和TCP组合的两倍。

答案 1 :(得分:0)

此示例适用于重新组合单个协议的应用程序数据:

tshark -Y "tcp.dstport == 80" -T fields -d tcp.port==80,echo -e echo.data

它捕获实时http数据,重新组合它,并将其输出为原始十六进制。

如果您愿意,我可以添加一个小脚本来将十六进制解析为ascii。

  

我希望在拥有服务器私钥的情况下分析SSL内容

TL; DR:这不能单独使用捕获工具完成。

为什么不:因为每个SSL会话都会生成一个新的秘密会话密钥,并且您无法在没有此密钥的情况下解密会话。拥有私人服务器密钥是不够的。这背后的想法是,如果有人捕获您的SSL流量,保存它,然后一年后他发现"私人服务器密钥,然后他仍然无法解密您的流量。