如果要编写使用Wireshark功能的脚本,请使用tshark。我听说在用C编写程序时也可以使用libwireshark,但就我的一生而言,我找不到有关它的任何文档!我曾尝试在wireshark源代码树中隔离库代码,但似乎代码的组织不是很好,并且这样的隔离不存在(要么如此,要么我找不到它)。
我有两个问题:
最佳答案
编号
libwireshark不能在Wireshark本身之外使用,尝试这样做将使您on your own试图找出问题所在。 libwireshark实际上是Wireshark的数据包分析部分的一部分(称为epan的 E thereal pa cket 和分析仪),您可以看到in the Developer's Guide并非Wireshark的全部。 libwireshark实际上提供的是所有内置协议(protocol)解剖器的主界面,插件解剖器的 Hook 以及完整的数据包解剖API。它依赖于Wireshark的其余部分设置的机制来处理不直接用于数据包解剖工具的事情,但是使解剖器能够执行其工作(例如分配解除分配的内存块,处理压缩或加密的数据等)。
代之以写一个解剖器。
如果您的项目是要以某种方式严格地分析网络流量,则可能要考虑为Wireshark编写一个解剖器,而不是重新发明Wireshark可以为您提供的许多轮子。如果您需要做一些更复杂的事情,例如监视网络流量,然后启动其他任务或自己发送数据,那么最好还是使用tshark
和shell脚本(请记住,不要让tshark
运行)在任何情况下都需要非常长的时间)。
如果您确实真的要直接使用libwireshark,则需要以某种方式解决其所有依赖关系(最好通过使其成为一个独立的库),并提供它对Wireshark(或tshark)实际正在运行的假设。 libwireshark的代码井井有条,只是它由Wireshark源代码树下的整个epan目录组成,并且根据Wireshark还是Ethereal时建立的约定进行布局。公开可见时,头文件中提供了每个功能的文档,而每种情况下,文档的源文件中都有更深入的介绍。还请记住,随您提供的源代码的版本一起分发的README.developer是获取一些提示的好地方(如果您要执行此任务,还可以阅读所有README。*文件)。