【问题标题】:Java/Minecraft - How to read/understand packetsJava/Minecraft - 如何阅读/理解数据包
【发布时间】:2016-04-02 23:46:53
【问题描述】:

我用 Java 编写了一个 Packet Sniffer,它运行良好,但现在我有一个带有整数的文本文件,但我不知道如何解码它们。 我已经尝试过使用这个: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

如果有人有答案,我将不胜感激。

【问题讨论】:

    标签: java networking minecraft


    【解决方案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. 使用数据包类型解码其余部分

    【讨论】:

    • 感谢您的回答。我尝试解压缩它(MCWiki 说它是 Gzip),但这不起作用,wireshark 向我显示了相同的结果。
    • 非常感谢你拯救了我的一天所有数据包信息都是正确的
    • 你是如何分辨前 3 行的目的的? 15是数据包的长度吗?或者它是一个对应于数字的字节?我不明白数据包 ID 或协议版本。
    • unofficial documentation 详细解释了这一点。
    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2023-03-26
    • 2020-09-03
    • 2022-01-15
    相关资源
    最近更新 更多