如何将Wireshark处理的数据转发到python?用什么方法?

问题描述 投票:1回答:2

Wireshark是一种用于网络流量分析的强大工具。但是从我的实践来看,它只能导出处理过的数据(这意味着,告诉你哪个部分是什么,例如“数据”:123456等)到.pcap文件,但我想在每个输出'data'段TCP数据包实时(或90%实时)到其他应用程序,如我的python脚本供进一步使用(可能是通过TCP转发?管道?)

我不知道如何完成它。有人愿意帮我这个吗?谢谢〜

ps:没有得到一些快照因为我什么都没有显示,甚至代码......

python linux tcp wireshark tcpdump
2个回答
1
投票

tldr;将tshark输出以任何格式(-T)输出到你的python程序中并在那里解析它。

我目前正在开发一个名为pdml2flow的项目,这对你也有帮助。对于项目,我依赖于tshark的pdml输出(XML)。哪个是通过管道传输到pdml2flow:

$ tshark -i interface -Tpdml | pdml2flow +json

我选择了pdml,因为它是我开始时最完整和最稳定的。但是现在许多输出格式如json或postscript也是可能的。来自tshark(1)

-T ek|fields|json|jsonraw|pdml|ps|psml|tabs|text

查看解码的分组数据时设置输出的格式。选项是以下之一:

  • ek:Newline分隔JSON格式,用于批量导入Elasticsearch。它可以与-j-J(包括JSON过滤器或-x)一起使用,以包括原始十六进制编码的数据包数据。如果指定-P,它将仅打印数据包摘要,使用-P-V它将打印数据包摘要和数据包详细信息。如果既不使用-P也不使用-V,它将仅打印数据包详细信息。将数据导入Elasticsearch的用法示例:
$ tshark -T ek -j "http tcp ip" -P -V -x -r file.pcap > file.json
$ curl -H "Content-Type: application/x-ndjson" -XPOST http://elasticsearch:9200/_bulk --data-binary "@file.json"

弹性需要将映射文件作为packet- * index的模板加载,以便将wireshark类型转换为弹性类型。可以使用命令tshark -G elastic-mapping自动生成此文件。由于映射文件可能很大,因此可以使用选项--elastic-mapping-filter选择协议:

tshark -G elastic-mapping --elastic-mapping-filter ip,udp,dns
  • fields:使用-e选项指定的字段值,采用-E选项指定的格式。例如,
tshark -T fields -E separator=, -E quote=d

会生成逗号分隔值(CSV)输出,适合导入您喜欢的电子表格程序。

  • json:JSON文件格式。它可以与-j-J一起使用,包括JSON过滤器或-x选项,以包括原始的十六进制编码分组数据。用法示例:
$ tshark -T json -r file.pcap
$ tshark -T json -j "http tcp ip" -x -r file.pcap
  • jsonraw:JSON文件格式,仅包括原始十六进制编码的数据包数据。它可以与-j一起使用,或者使用-J JSON过滤器选项。用法示例:
$ tshark -T jsonraw -r file.pcap
$ tshark -T jsonraw -j "http tcp ip" -x -r file.pcap
  • pdml:数据包详细信息标记语言,一种基于XML的格式,用于解码数据包的详细信息。此信息等同于使用-V选项打印的数据包详细信息。使用--color选项将为pdml输出添加颜色属性。这些属性是非标准的。
  • ps:PostScript,用于每个数据包的人类可读的一行摘要,或每个数据包详细信息的多行视图,具体取决于是否指定了-V选项。
  • psml:数据包摘要标记语言,一种基于XML的格式,用于解码数据包的摘要信息。此信息等同于默认打印的单行摘要中显示的信息。使用--color选项将为pdml输出添加颜色属性。这些属性是非标准的。
  • tabs:类似于默认文本报告,除了每个数据包的人类可读的一行摘要将包括ASCII水平制表符(0x09)字符作为每列之间的分隔符。
  • text:每个数据包的人类可读的一行摘要的文本,或每个数据包的详细信息的多行视图,具体取决于是否指定了-V选项。这是默认值。

这意味着没有什么能阻止您为任何这些输出格式编写自己的解析器:

$ tshark -i interface -Tjson | python your_program.py

为方便起见,pdml2flow已经将pdml解析为python嵌套的dict,并将其提供给以plugin实现的代码。在这样的插件中,您可以完全访问每个框架和流程,并可以随心所欲地执行任何操作。

示例插件:

以下截屏视频演示了如何在几秒钟内创建和运行新插件:

asciicast

pdml2flow实现了所有构建块,以便您快速开始在python中处理帧。我希望这有帮助,我确实感谢任何反馈。谢谢。


0
投票

考虑使用named pipes作为进程间通信的缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.