我知道有一个程序可以从原始二进制数据中“挖掘”(寻找)TCP IP 数据包。它呈现的结果是源和目标 MAC 地址、源和目标 IP 地址以及一些其他信息(端口号等)。
我很好奇,想知道哪些数据位可以作为签名\标志,以便在大量其他二进制数据中识别此类数据?下面的示例是我自己测试的一个 IP 数据包。前 6 个字节 = 目标 MAC 地址。接下来的 6 个字节是源 MAC 地址。0800 是我现在忘记的某种标记。45 AB F7 25 是一个 IP 地址,C0 A8 6F A0 是我的一个内部 IP 地址等。
但是它前后没有任何内容表明“嘿 - 这是 TCP IP 数据”。还有数百个其他类似的例子。那么当起始数据只是一个 MAC 地址时,软件如何找到它和其他数据 - 而不是您可以轻松编写程序来查找的东西(这是我自己想做的)?
有什么想法吗?
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
000000000 00 0C 29 31 24 41 00 50 56 ED A5 46 08 00 45 00 )1$A PVí¥F E
000000016 00 28 C0 A8 00 00 80 06 0D 0E 45 AB F7 25 C0 A8 (À¨ € E«÷%À¨
000000032 6F A0 01 BB 06 AF 7C 3E 0B 51 35 87 6B 87 50 10 o » ¯|> Q5‡k‡P
000000048 FA F0 16 C2 00 00 00 00 00 00 00 00 00 00 00 00 úð Â
000000064 FD 0C AC 83 FB 0A B0 41 B3 B3 F8 71 88 1F 4C 8C ý ¬ƒû °A³³øqˆ LŒ
答案1
我的建议是,下载并使用 Wireshark 捕获一些数据。确保已启用数据包列表、数据包详细信息和数据包字节查看选项,然后开始单击数据包。在数据包详细信息部分,您可以单击数据包的 L2、L3 和 L4 部分,它将突出显示与您选择的内容相关的字节。
然后开始在网上搜索,了解以太网报头/封装、IP 报头、TCP 报头等。维基百科通常是这类主题的良好起点,但网上有数百种资源。我快速搜索了一下,想找一张代表以太网框架最终如何构建的图像,结果发现这张相当不错:http://www.tcpipguide.com/free/t_IPDatagramEncapsulation.htm
还没有阅读内容,但是在这样的资源之间并开始在 Wireshark 这样的工具中使用框架的各个部分,您会发现二进制数据具有明确的结构,并且很容易区分。
答案2
字节 13、14、15 是 IPv4 或 IPv6 标记。在您提供的屏幕截图中,它是 00 45 00,因此您有一个 IPv4 数据包。
对于 IPv4 数据包,请查看第 23 个字节。如果是 06,则表示您有 TCP 数据包。如果是 11,则表示您有 UDP 数据包。
对于 IPv6 数据包,它是第 20 个字节。