Wireshark是一种用于网络流量分析的强大工具。但是从我的实践来看,它只能导出处理过的数据(这意味着,告诉你哪个部分是什么,例如“数据”:123456等)到.pcap文件,但我想在每个输出'data'段TCP数据包实时(或90%实时)到其他应用程序,如我的python脚本供进一步使用(可能是通过TCP转发?管道?)
我不知道如何完成它。有人愿意帮我这个吗?谢谢〜
ps:没有得到一些快照因为我什么都没有显示,甚至代码......
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实现的代码。在这样的插件中,您可以完全访问每个框架和流程,并可以随心所欲地执行任何操作。
示例插件:
以下截屏视频演示了如何在几秒钟内创建和运行新插件:
pdml2flow实现了所有构建块,以便您快速开始在python中处理帧。我希望这有帮助,我确实感谢任何反馈。谢谢。
考虑使用named pipes作为进程间通信的缓冲区。