数据包内容的二进制读取器

本文关键字:读取 二进制 数据包 | 更新日期: 2023-09-27 18:23:58

我创建了一个应用程序,使用此示例检索网络数据包:http://www.codeproject.com/Articles/4217/Packet-Sniffing-with-Winpcap-Functions-Ported-to-a

我的意图是使用它来获取从服务器发送到特定应用程序的特定数据包的内容,我对任何其他数据包都不感兴趣。我感兴趣的数据包是一个周期性更新的值。

我把它转换成了VB.Net,因为这是我的偏好,所以我会用VB给出我的代码片段,尽管我也能理解C#,所以可以随意用C#给出例子。

它有一个参数为"s"的事件,该事件包含字节数组中接收到的数据包的内容。

我正在将该数组转换为使用如下二进制读取器读取:

Dim stream As System.IO.MemoryStream = New System.IO.MemoryStream(s)
Dim reader As New System.IO.BinaryReader(stream)
Dim pos As Long = 0
Dim length As Long = reader.BaseStream.Length

然后,我将使用"pos"变量作为当前位置,并按当前字节的数据类型递增。(比如:something=reader.ReadString()pos+=something。长度)

我唯一的问题是:我不确定我应该找什么类型的?数据包的"结构"是什么?是否可以检索数据包发送的服务器和发送到的应用程序?

我以前从未尝试过对数据包使用这样的东西,我只有从自定义格式的数据库文件中获取数据的经验。


编辑:我发现了一些更有用的东西,其中有解释源/目标IP以及如何通过它们进行过滤的文档,它看起来比前面提到的上面的例子要完整得多。

http://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework-for-NET

尽管它仍然没有解释如何理解数据包内容本身,但能够过滤数据包是一个很大的帮助。

数据包内容的二进制读取器

可能存在许多不同类型的网络数据包,大多数都有很好的文档记录。

你想做的是下载Wireshark(微软也有一个类似的工具,我现在不知道它的名字),用它运行一些捕获,然后查看日志。

Wireshark几乎可以识别现有的每一个网络数据包,因此您可以使用其日志来确定需要识别的数据包类型,然后在谷歌上搜索其规格。