Project-Poseidon icon indicating copy to clipboard operation
Project-Poseidon copied to clipboard

Introduce beta 1.8 Packet254GetInfo for server ping

Open alfonsojon opened this issue 1 year ago • 7 comments

backport of beta 1.8 server ping to beta 1.7.3

alfonsojon avatar Nov 21 '24 19:11 alfonsojon

resolves #12

alfonsojon avatar Nov 21 '24 19:11 alfonsojon

~~it seems this would not resolve adding servers to lists as from what I can tell, Planet Minecraft is not using the server ping feature but rather the query port 25565, which is a whole different animal~~

After speaking with a Planet Minecraft employee, I found that this was inaccurate & rather caused by their specific implementation of the server ping.

alfonsojon avatar Nov 23 '24 01:11 alfonsojon

Carried out some testing with this pull request and it appears to work as expected with B1.8 clients, however, I have noted that large errors are printed in consolse when a modern client (1.21) attempts to query data. Likely this needs to be less verbose as this could spam consoles of servers. image

RhysB avatar Nov 23 '24 02:11 RhysB

I checked with a CraftBukkit b1.8.1 server and can validate that the bad packet ID 5 error is there, but it doesn't throw a NullPointerException due to string length. Similar issue though slightly less verbose.

00:30:24 [SEVERE] java.io.IOException: Bad packet id 5

00:30:24 [SEVERE]       at net.minecraft.server.Packet.a(Packet.java:73)

00:30:24 [SEVERE]       at net.minecraft.server.NetworkManager.h(NetworkManager.java:149)

00:30:24 [SEVERE]       at net.minecraft.server.NetworkManager.c(NetworkManager.java:263)

00:30:24 [SEVERE]       at net.minecraft.server.NetworkReaderThread.run(SourceFile:77)

00:30:25 [INFO] Disconnecting /127.0.0.1:50630: Protocol error
00:30:25 [INFO] /127.0.0.1:50630 lost connection
00:30:38 [SEVERE] java.io.IOException: Bad packet id 5

00:30:38 [SEVERE]       at net.minecraft.server.Packet.a(Packet.java:73)

00:30:38 [SEVERE]       at net.minecraft.server.NetworkManager.h(NetworkManager.java:149)

00:30:38 [SEVERE]       at net.minecraft.server.NetworkManager.c(NetworkManager.java:263)

00:30:38 [SEVERE]       at net.minecraft.server.NetworkReaderThread.run(SourceFile:77)

00:30:38 [INFO] Disconnecting /127.0.0.1:58168: Protocol error

alfonsojon avatar Nov 24 '24 06:11 alfonsojon

Pre-Netty Rewrite

Protocol 17 - 23 (b1.8 - 1.1)

  • Ping works, attempting to join results in Outdated server! I'm still on Beta 1.7.3 on client & server.

Protocol 28 - 29 (1.2 - 1.2.5)

  • Ping works, attempting to join results in the following error on the client Internal exception: java.net.SocketException: Connection reset and the following error in the server console:
[SEVERE] java.io.IOException: Received string length longer than maximum allowed (34 > 32)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:165)
[SEVERE]       at net.minecraft.server.Packet2Handshake.a(Packet2Handshake.java:18)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:110)
[SEVERE]       at net.minecraft.server.NetworkManager.g(NetworkManager.java:180)
[SEVERE]       at net.minecraft.server.NetworkManager.c(NetworkManager.java:332)
[SEVERE]       at net.minecraft.server.NetworkReaderThread.run(NetworkReaderThread.java:37)

Protocol 39 (1.3-1.3.2)

  • Ping works, attempting to join results in the following error on the client Internal exception: java.net.SocketException: Connection reset and the following error in the server console:
[SEVERE] java.io.IOException: Received string length longer than maximum allowed (9984 > 32)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:165)
[SEVERE]       at net.minecraft.server.Packet2Handshake.a(Packet2Handshake.java:18)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:110)
[SEVERE]       at net.minecraft.server.NetworkManager.g(NetworkManager.java:180)
[SEVERE]       at net.minecraft.server.NetworkManager.c(NetworkManager.java:332)
[SEVERE]       at net.minecraft.server.NetworkReaderThread.run(NetworkReaderThread.java:37)

Protocol 47 - 61 (1.4 - 1.5.2)

  • Ping works, client incorrectly detects the server is running Minecraft 1.3. Joining is not possible.

Protocol 72 - 78 (1.6 - 1.6.2)

  • Ping does not work, following error appears in the server console:
[SEVERE] java.io.IOException: Received string length longer than maximum allowed (9984 > 32)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:165)
[SEVERE]       at net.minecraft.server.Packet2Handshake.a(Packet2Handshake.java:18)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:110)
[SEVERE]       at net.minecraft.server.NetworkManager.g(NetworkManager.java:180)
[SEVERE]       at net.minecraft.server.NetworkManager.c(NetworkManager.java:332)
[SEVERE]       at net.minecraft.server.NetworkReaderThread.run(NetworkReaderThread.java:37)

Post-Netty Rewrite

Protocol 0+ (1.7 - modern)

  • Ping does not work, the following info appears in the server console: `[INFO] Bad packet id: 23

alfonsojon avatar Dec 16 '24 16:12 alfonsojon

After testing with a local instance of CraftBukkit 1185, I can confirm this behavior is identical in both Project Poseidon and CraftBukkit, so a custom solution will need to be ported.

This is the output I get from trying to ping a b1.8.1 server running CraftBukkit 1185 using a Minecraft 1.6.4 client:

[SEVERE] java.io.IOException: Received string length longer than maximum allowed (19712 > 16)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:134)
[SEVERE]       at net.minecraft.server.Packet1Login.a(SourceFile:38)
[SEVERE]       at net.minecraft.server.Packet.a(Packet.java:81)
[SEVERE]       at net.minecraft.server.NetworkManager.h(NetworkManager.java:149)
[SEVERE]       at net.minecraft.server.NetworkManager.c(NetworkManager.java:263)
[SEVERE]       at net.minecraft.server.NetworkReaderThread.run(SourceFile:77)

alfonsojon avatar Dec 16 '24 17:12 alfonsojon

This behavior is also experienced when pinging a vanilla Minecraft b1.8.1 server using a Minecraft 1.6.4 client. This behavior does match vanilla Minecraft beta 1.8's ping behavior. I have not been able to reproduce the NPE caused by pinging with a modern client version

java.io.IOException: Received string length longer than maximum allowed (19712 > 16)
        at in.a(SourceFile:191)
        at la.a(SourceFile:38)
        at in.a(SourceFile:145)
        at ma.h(SourceFile:190)
        at ma.c(SourceFile:10)
        at ta.run(SourceFile:77)
java.lang.NullPointerException: Cannot invoke "java.net.Socket.getInetAddress()" because "<parameter1>" is null
        at dr.a(SourceFile:63)
        at fi.a(SourceFile:156)
        at db.a(SourceFile:16)
        at ma.b(SourceFile:272)
        at fi.a(SourceFile:46)
        at dr.a(SourceFile:94)
        at net.minecraft.server.MinecraftServer.h(SourceFile:373)
        at net.minecraft.server.MinecraftServer.run(SourceFile:302)
        at ce.run(SourceFile:417)

alfonsojon avatar Dec 16 '24 18:12 alfonsojon