【问题标题】:Binary reader for packet contents?数据包内容的二进制阅读器?
【发布时间】:2014-11-17 10:41:50
【问题描述】:

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

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

我将它转换为 VB .Net,因为这是我的偏好,所以我将在 VB 中提供我的代码 sn-ps,虽然我也能理解 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.Length)

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

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


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

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

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

【问题讨论】:

  • 坦率地说,BinaryReader 的主要用途是读取用BinaryWriter 写入的数据。因为这里不是这样:忘记BinaryReader - 它不会帮助你。

标签: c# vb.net packet packet-capture binaryreader


【解决方案1】:

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

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

Wireshark 几乎可以识别存在的每个现有网络数据包,因此您可以使用它的日志来确定您需要能够识别的数据包类型,然后在 Google 上搜索它的规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    相关资源
    最近更新 更多