Java/Minecraft - 如何读取/理解数据包

标签 java networking minecraft

我用 Java 编写了一个数据包嗅探器,它工作得很好,但现在我有一个包含整数的文本文件,但我不知道如何解码它们。 我已经尝试使用这个:Minecraft Protocol ,但我仍然无法解码数据包...

输出:

[Client] 15
[Client] 0
[Client] 47
[Client] 9
[Client] 108
[Client] 111
[Client] 99
[Client] 97
[Client] 108
[Client] 104
[Client] 111
[Client] 115
[Client] 116
[Client] 30
[Client] 97
[Client] 1
[Client] 1
[Client] 0


[Server] 118
[Server] 0
[Server] 116
[Server] 123
[Server] 34
[Server] 100
[Server] 101
[Server] 115
[Server] 99
[Server] 114
[Server] 105
[Server] 112
[Server] 116
[Server] 105
[Server] 111
[Server] 110
[Server] 34
[Server] 58
[Server] 34
[Server] 65
[Server] 32
[Server] 77
[Server] 105
[Server] 110
[Server] 101
[Server] 99
[Server] 114
[Server] 97
[Server] 102
[Server] 116
[Server] 32
[Server] 83
[Server] 101
[Server] 114
[Server] 118
[Server] 101
[Server] 114
[Server] 34
[Server] 44
[Server] 34
[Server] 112
[Server] 108
[Server] 97
[Server] 121
[Server] 101
[Server] 114
[Server] 115
[Server] 34
[Server] 58
[Server] 123
[Server] 34
[Server] 109
[Server] 97
[Server] 120
[Server] 34
[Server] 58
[Server] 50
[Server] 48
[Server] 44
[Server] 34
[Server] 111
[Server] 110
[Server] 108
[Server] 105
[Server] 110
[Server] 101
[Server] 34
[Server] 58
[Server] 48
[Server] 125
[Server] 44
[Server] 34
[Server] 118
[Server] 101
[Server] 114
[Server] 115
[Server] 105
[Server] 111
[Server] 110
[Server] 34
[Server] 58
[Server] 123
[Server] 34
[Server] 110
[Server] 97
[Server] 109
[Server] 101
[Server] 34
[Server] 58
[Server] 34
[Server] 83
[Server] 112
[Server] 105
[Server] 103
[Server] 111
[Server] 116
[Server] 32
[Server] 49
[Server] 46
[Server] 56
[Server] 46
[Server] 55
[Server] 34
[Server] 44
[Server] 34
[Server] 112
[Server] 114
[Server] 111
[Server] 116
[Server] 111
[Server] 99
[Server] 111
[Server] 108
[Server] 34
[Server] 58
[Server] 52
[Server] 55
[Server] 125
[Server] 125


[Client] 9
[Client] 1
[Client] 0
[Client] 0
[Client] 0
[Client] 0
[Client] 10
[Client] 158
[Client] 220
[Client] 203


[Server] 9
[Server] 1
[Server] 0
[Server] 0
[Server] 0
[Server] 0
[Server] 10
[Server] 158
[Server] 220
[Server] 203
[Server] -1


[Client] -1

如果有人能给出答案,我将非常感激。

最佳答案

似乎没有整数高于 255,所以这是每行输出一个字节。您看到的数据包可能是压缩的,但如果不查看您的 Minecraft 用户/服务器的配置,就无法判断。如果它们实际上是压缩的 - 您需要先解压缩它们,然后才能分析它们。

为了帮助您解码,我强烈推荐 Wireshark。下载它并重新运行您的网络捕获。然后将解码的输出与程序的输出进行比较。 Wireshark 会给出数据包中每个数据成员的含义。

编辑:您不清楚解码的哪一部分?使用笔和纸以及windows计算器在编程模式下进行第一个数据包的解码:

15 - Varint - length of the packet
0  - Varint - packet ID - Handshake
47 - VarInt - protocol version
     Following bytes are length prefixed server address in UTF-8:
9  - Lenght
108 - l
111 - o
99  - c
97  - a
108 - l
104 - h
111 - o
115 - s
116 - t
     Following 2 bytes are server port in unsigned short format (I guess 7777)
30
97

1  - Varint - Next state

最后 2 个字节我不清楚。

简而言之 - 对于每个数据包:

  1. 查找数据包的长度
  2. 查找数据包类型
  3. 使用数据包类型解码其余部分

关于Java/Minecraft - 如何读取/理解数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274399/

相关文章:

java - 有没有比 RMI 更快的 Java 二进制协议(protocol)?

C++ boost 单元测试 : How to manually finish unit test with success?

java - Bukkit ConfigurationSection getKeys

java - 运行java类文件的简单方法(终端)

java - Neo4j遍历API

java - 无法使 FileNameExtensionFilter 工作

java - spring-boot:使用硬编码文件名配置不同版本的属性文件?

java - 在Java中构造新对象时出现堆栈溢出错误

c - Winpcap 代码 - 捕获在循环中丢失数据包

mysql - 在 Bukkit/Spigot 插件中实现 SQL