This packet is able to trick the server into thinking a client is trying to connect:
Code: Select all
\x00T\x04username\x00+Freeciv-3.1-network city-original rsdesc32 obsinv ids32\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03
Code: Select all
PACKET_SERVER_JOIN_REQ = 4; cs, dsend, no-delta, no-handle
STRING username[48];
STRING capability[512];
STRING version_label[48];
UINT32 major_version, minor_version, patch_version;
end
What does the \x00T at the beginning mean?
I am assuming that 04username is the packet number and the username string.
Why, then, is the username string shorter than 48 characters?
Also, why aren't they separate?
The next chunk is obviously the capability string.
Why is the version_label string empty?
Also, there are 5 x00 blocks between capability and major_version. I am assuming that each block is a byte, in hexadecimal. So then, three are the most significant three bytes of major_version, and one would be the empty version_label. What is the last one for?