因此,我的任务是为我们的 QA 部门创建一个工具,该工具可以从网络中读取数据包并正确重组消息(他们不信任我们的日志……长篇大论)。
我试图监听其通信的应用程序正在使用 .NET 的 TcpListener 和 TcpClient 类进行通信。拦截数据包不是问题(我正在使用SharpPcap)。然而,将数据包正确地重新组装成应用程序级消息被证明有点困难。
一些数据包中包含一条消息的结尾和下一条消息的开头,我无法弄清楚 .NET 中的 NetworkStream 对象如何能够判断一个应用程序级消息在哪里结束而另一个在哪里开始。
我已经能够弄清楚任何包含应用程序级别消息结尾的数据包都将打开 TCP 标头“PSH”(推送)标志。但我无法弄清楚.NET 是如何知道该数据包内消息末尾的确切位置的。
一个数据包的数据可能如下所示:
/></Message><Message><Header fromSystem=http://blah
流如何知道只发送到</Message>
应用程序的末尾并存储其余部分,直到消息的其余部分完成?
没有为分段设置 IP 级别标志,并且 .NET 套接字不了解应用程序级别协议。所以我觉得这非常令人烦恼。任何见解将不胜感激。