魔兽局域网协议UDP部分详细解释

魔兽局域网主要有4种消息
第一种、搜索游戏:
F7 2F 10 00 50 58 33 57 15 00 00 00 00 00 00 00 ?PX3W
这个格式比较简单。
F7 2F 10 00 是格式头部,消息含义的标志。
50 58 33 57 是PX3W几个字,就是冰封王座的逆序。
15 00 00 00 是版本号,0x15=21,即是1.21版的冰封王座在搜索游戏。
00 00 00 00 是某个魔兽的标志,看似无意义,实际很重要。后面会说明。

魔兽在多种情况下都会发布此消息,例如刚进入局域网,从游戏中退出,从创建的游戏中退出等等。

第二种、结束游戏:
F7 33 08 00 00 00 00 00
F7 33 08 00为消息内容标志,00 00 00 00同第一种消息,后面说明。
魔兽在收到此消息后会从游戏列表中删除对应IP的游戏。
魔兽在取消游戏或者开始游戏时会发送此消息。

第三种、LANTag
这个是魔兽中传输次数最多的消息。短小但是作用多。
F7 32 10 00 00 00 00 00 01 00 00 00 00 00 00 00 ?
F7 32 10 00 消息标志,不多说了。
00 00 00 00 神秘标志。
01 00 00 00 忘了,貌似是固定值
02 00 00 00 空余位置数+1

那个特殊的标志是什么呢?那个就是魔兽创建游戏的次数。
它表示了当前是第几次游戏。关闭游戏后重置为0。看似这个是没什么用的标志,但是魔兽程序对收到的消息中这个值不对(和当前系统游戏次数不同)的消息都是无视,例如创建了8次游戏的魔兽服务器(主机),对F7 2F 10 00 50 58 33 57 15 00 00 00 01 00 00 00是没有反映的,F7 2F 10 00 50 58 33 57 15 00 00 00 08 00 00 00才能正常的返回游戏信息。但是作为一个特例,所有主机对00都有响应。但是其中还稍有不同。我们先把这个标志成为tagcount。

这个LANtag有很多用处。处于等待状态的魔兽收到lantag后会发送一个tagcount和lantag中相同的搜索游戏消息(第一种消息)。已经搜索到对应IP创建的游戏的魔兽会根据lantag改变游戏列表中空余位置的显示。同时tagcount=00的特殊性就体现在这里,搜索到某IP创建的游戏的魔兽对00会返回搜索游戏消息,而不管是从哪个ip发来的,而对从该IP发送过来的tagcount不等于0的lantag无返回消息。

第四种、游戏信息:




F7 30 8B 00消息标志,略过。
58 33 57 15 冰封王座标志,略过。
15 00 00 00 版本号。
01 00 00 00 tagcount,请参考上文。
39 0A E5 01 未知,每次消息都不同
00 01 03 49 07 01 01 55 01 D1 55 01 0D 65 C3 9B:未知,包含例如是否开图,是否开启裁判等信息。
E5 BD 93 E5 9C B0 E5 B1 80 E5 9F 9F E7 BD 91 E5 86 85 E7 9A 84 E6 B8 B8 E6 88 8F 20 28 46 6C 00:UTF-8的局域网游戏名称“当地局域网内的游戏 (Fl”。
4D EB 61 71 73 5D 69 65 73 A1 75 5D
29 33 29 55 65 75 73 65 6F 61 73 53 75 63 61 6F
65 2F 77 33 79 B1 01 47 6D 79 69 6F 67 1B 53 6F
6F 77 01 01
一段简单加密的信息,地图和创建者信息。加密规则如下。
从"(Fl\0"后开始往后第10个字节开始,每8个为一个加密组,例如:
D1 55 01 0D 65 C3 9B 4D为一个加密组,D1为密钥。
EB 61 71 73 5D 69 65 73为一个加密组,EB为密钥。
其实是一段简单的奇偶校验加密。
0xEB=11101011。将二进制字符串逆序取反为00101000,所以,正确字符串为:
EB-0 61-0 71-1 73-0 5D-1 69-0 65-0 73-0
其中密钥位舍去,得61 70 73 5C 69 65 73即为aps\ies
如此解密此部分数据为:
Maps\iest\(2)EchoIsles.w3x\0FlyingSnow\0\0
\0为结束符,即二进制00。
最后以一个00最结束。
02 00 00 00:游戏总共允许玩家。
01 00 00 00:未知,似乎是电脑数。
01 00 00 00:未知,似乎是玩家数。
01 00 00 00:剩余空位。
08 00 00 00:未知。似乎是定值。
E0 17=0x17E0=6112,游戏端口。
至此分析完毕。
游戏数据流程是,魔兽发送搜索信息->接受游戏信息->根据Lantag调整空闲人数。
魔兽启动局域网时会发送一个搜索信息广播(仅当前子网),仅广播一次。
当新游戏主机加入时,该游戏主机广播一个Lantag,魔兽收到Lantag后向该主机发送搜索消息。游戏主机在创建完游戏等待加入时每隔一段时间广播一个Lantag。游戏主机的空闲位置有任何变化时广播Lantag。
取消或开始游戏后发送结束消息
posted @ 2008-06-24 09:08  至尊王者  阅读(3659)  评论(5编辑  收藏  举报