在观察到有效流的开始之前,如何让Wireshark解析器忽略数据包?

时间:2014-04-06 05:30:32

标签: lua wireshark network-protocols

我有一个在Lua中构建的解剖器,它只检查数据包是否以zlib头开头。从那时起,我想实时解压缩该流。

不幸的是,我遇到了流损坏,因为只有一个方向(服务器到客户端)被压缩,客户端会干扰它。我希望一个解剖器处理服务器到客户端数据包和另一个解析器来处理客户端到服务器数据包,因为它们使用基本上不同的协议,或者在一个解剖器中处理它们的方法。

棘手的部分是你不能在没有看到流中的第一个数据包的情况下解压缩zlib流,所以我想以其他颜色显示我的数据包,直到观察到压缩流的开始,可能会过滤掉它们

我尝试return 0return nil表示我无法使用解剖器处理数据包,但它仍然使用我的解剖器协议对其进行标记,因为解剖器已注册本身对着数据包遇到的端口。这似乎没有任何改变,所以看起来似乎。

  • 我如何告诉Wireshark我的解剖器没有成功处理数据包?
  • 当收到发往我注册的端口的数据包时,如何将数据包推迟到我的客户端到服务器解析器?
  • 在看到zlib流的开头之前,如何让我的解剖器忽略数据包?

1 个答案:

答案 0 :(得分:0)

  
      
  • 我如何告诉Wireshark我的解剖器没有成功处理数据包?
  •   

您无法 - 如果您已为特定TCP或UDP端口注册了协议解析器,则该UDP / TCP端口的数据包是您的协议。返回0nilfalse不会改变这一点。从最近的Wireshark 1.11.3版本开始,您可以注册启发式解剖器。 (更多内容见下文)

  
      
  • 如何将数据包推迟到我的客户端到服务器解析器   收到一个发往我注册的端口的数据包?
  •   

proto.dissector()函数调用您定义的其他两个函数之一。即编写一个名为process_client的本地函数和另一个名为process_server的函数,并在proto.dissector()函数中调用这些函数,这些函数基于使其成为一个与另一个的因素。 (听起来像源端口与dest端口将是您的决策者吗?)

  
      
  • 在看到zlib流的开头之前,如何让我的解剖器忽略数据包?
  •   

这取决于你的意思"忽略"。显然你需要剖析该端口上的每个数据包......至少足以弄清楚它是否是你正在寻找的开始。通常情况下,解剖器(C代码)在这种情况下做的是将数据包标记为" Continuation" - 即,它是他们的协议,但是他们将信息列设置为说出文本" Continuation"对于他们无法解剖的数据包。在捕获文件开始时使用基于TCP的协议是很常见的,因为在TCP流中间开始捕获而不是在第一个中获取整个应用程序消息是很常见的。 TCP段。

另一种选择是使用heuristic解剖器,最近引入了1.11.3。启发式解剖器类似于dissector,除了函数的名称不同,并且它的注册略有不同。 (API记录为hereWireshark Lua examples页面顶部的dissector.lua脚本实现了一个启发式解剖器。

启发式解剖器函数会像普通dissector一样调用每个数据包,但会返回truefalse - 如果它返回false,则Wireshark会尝试任何其他注册启发式解剖器,并没有将其标记为您的协议;如果你返回true,wireshark就会知道你的。{1}}。你可以设置" conversation"作为你的协议,然后wireshark会打电话给你的"正常"从那时起,dissector函数用于该源/目标IP:端口组合。换句话说,你没有注册你的正常"解剖器,只是启发式的,然后你告诉wireshark何时开始使用你的正常流程。


顺便说一句:一般来说,你最好在ask.wireshark.org上询问基于Lua的Wireshark问题,因为那里有更多有经验的人,通常你会得到更快的答案。