11

如果我想编写一个使用 Wireshark 功能的脚本,我会使用 tshark。我听说还有一个 libwireshark 可以在用 C 编写程序时使用,但是,就我的一生而言,我找不到任何文档!我尝试在wireshark源代码树中隔离库代码,但似乎代码组织得不是很好,并且这种隔离不存在(或者我没有找到它)。

我有两个问题:

  1. 我是否认为 libwireshark 确实可以用于以编程方式获取我可以从 wireshark/tshark 获得的任何功能?
  2. 您能否指出有关该主题的任何文档/教程/示例?即使是几个简单的例子也能起到很大的作用。如果做不到这一点,你能指出我如何在wireshark源代码树中找到自己的方式吗?
4

4 回答 4

10

不。

libwireshark 不打算在 Wireshark 本身之外使用,尝试这样做会让您自己试图找出问题所在。libwireshark 实际上是 Wireshark的数据包分析部分(称为epan for Ethereal packet an alyzer),您可以在开发人员指南中看到不只是 Wireshark。libwireshark 实际提供的是所有内置协议解析器的主接口、插件解析器的钩子以及完整的数据包解析 API。它依赖于 Wireshark 的其余部分设置的机制,这些机制不是直接的数据包解析工具,而是使解析器能够完成它们的工作(例如,分配释放内存块、处理压缩或加密数据等)。

而是写一个解剖器。
如果您的项目是以某种方式严格分析网络流量,您可能需要考虑为 Wireshark 编写解析器,而不是重新发明 Wireshark 可以为您提供的许多轮子。如果你需要做一些更复杂的事情,比如监控网络流量,然后启动其他任务或自己发送数据,你可能最好还是tshark像现在一样使用 shell 脚本(请记住,你不应该让tshark运行非常在任何情况下很长一段时间)。

如果您真的非常想直接使用 libwireshark,您将需要以某种方式解决它的所有依赖项(最好将其设为真正的独立库)并提供它对 Wireshark(或 tshark)实际运行所做的假设。libwireshark 的代码组织良好,只是它由 Wireshark 源代码树下的整个 epan 目录组成,并根据 Wireshark 仍然是 Ethereal 时建立的约定进行布局。每个函数的文档在公开可见时都在头文件中提供,并且在每种情况下都在源文件中更深入地提供。还要记住README.developer与您拥有的源代码版本一起分发是获得一些提示的好地方(如果您想执行此任务,您不妨阅读所有 README.* 文件)。

于 2012-04-27T18:07:39.467 回答
3

是的!您可以使用 libwireshark 获得该功能。我已经编写了整个代码来做同样的事情。它很好用。

于 2012-11-06T20:05:48.573 回答
3

当然可以在 Wireshark 本身之外使用 libwireshark,因为我知道netexpect就是这样做的。您可以尝试在该项目的网站上查找信息,或者您可以尝试联系 netexpect 的作者 Eloy Paris 以获得进一步的帮助/指示。

于 2013-09-06T21:08:02.650 回答
1

甚至我也为wireshark功能编写了脚本,作为我项目的一部分,以实现某些事情的自动化。

最好的做法是使用如下的wireshark插件:

  1. tshark 添加 pcap 文件,应用过滤器,但是如果您发现那里缺少任何功能,只需在 wireshark 源代码中编辑 tshark.c。
  2. capinfos 提供详细信息,例如数据包数量或文件大小等(wireshark 源代码中有一个名为 capinfos 的脚本,如果您想要更多功能,请编辑它)

请注意,附加组件仅在 Linux 中有效,而 capinfos 是用 shell 脚本编写的。因此,您可以使用相同的 shell 脚本并创建新脚本以获得更好的功能。

即使我最初也面临很多问题,因为没有适当的文档。但是一旦你开始,它就会顺利进行。

于 2012-04-25T08:01:08.043 回答