魔兽局域网跨网段联机原理浅析

研究(准确的说,应该用“折腾”)魔兽局域网联机的时候,一开始是猛的自己抓包分析,大概的弄清楚数据含义了,可是不太相信自己,就上网拼命的搜资料,最后发现也有不少的人在研究这个东西...

心语的专栏

http://blog.csdn.net/xinrui5577/archive/2009/09/16/4560590.aspx

看到他的文章,给了我不少的肯定,更佩服心语前辈(给过我启迪的都是前辈),用java来实现~其实只要懂java,学C++是很easy的,编程语言无界限嘛……

下面是我对他文章的理解:


 

首先魔兽在进入局域网的时候它就开始启用套接字并绑定udp套接字到本地端口6112(默认端口),开始向255.255.255.255即同一网段广播询问信息

内容:F7 2F 10 00 50 58 33 57 14 00 00 00 00 00 00 00
我的魔兽版本是1.20E所以第九个字节是0x14,从对WC3 Game Searcher抓包来看,1.21 是15,1.22是16...

 

war3.exe只把这个UDP数据包发给同网段的IP,所以,如果你想要搜索不同网段的IP就只需要把这个包发给他的6112端口就行了...

当他的机子上的war3.exe在6112端口收到这个包以后,就会往你的6112发回馈UDP包,如果你不想做其他什么事而只想让他能联机就行的话,给他发了这个UDP包就万事OK了,工作完成了,接下来的事war3.exe会处理...

如此看来,要实现联机也是非常之简单的...

 

而当你自己建好主机以后,war3.exe就会广播建主信息

内容:F7 32 10 00 01 00 00 00 01 00 00 00 04 00 00 00

告诉别人说 我建主了……

同样,如果你要让不同网段的机子知道你建了主,只要往他的6112端口发这个消息就行了,在他的war3.exe接到这个消息后接下来的链接war3会自己搞定...

 

所以,如果你写个程序在自己建主机的时候发送  建主信息包  的话就能实现让不同网段的机子加入你的主机,发送  询问信息包 的话就能实现加入不同网段的主机...

 

当然,要实现像WC3 Game Searcher 一样强大的功能就继续分析魔兽数据包罗...

监听本地的6112端口,在他发UDP包的时候就把这个包转发到不同网段,这就要用到原始套接字了……

用UDP协议也行,不过要用到SO_REUSEADDR属性,端口重用,但是这里有个问题,就是当你把套接字重绑定到6112端口时,魔兽退出了局域网,而当魔兽要再进局域网的时候就会出现 不能连接网络 的错误,因为端口被你的socket绑定了嘛,魔兽的套接字是没设置SO_REUSEADDR属性的...

 

然后后面就是一个详细的主机信息包,有主机名,地图信息,当前游戏人数等,我就不继续分析啦,有兴趣就看心语的那篇文章……

 

这里提供一个思路:

在对战平台玩魔兽就不会不知道有个工具叫T人挂,其原理就是当你是主机的时候断开与玩家的TCP连接,而目前大部分的T人挂都不能做到指定玩家T人,只能根据进主机的先后顺序看分配的端口大小对应关系来判断,有个工具除外,就是Shadow French 的W3XCustomKick

他是读魔兽的内存来得到玩家ID跟端口号的对应关系的(巨牛B啊),有兴趣的可以拿着Smart Check去慢慢跟踪,不过我保证你看到后会想哭……如果从TCP连接入手的话,就能很容易得到玩家ID跟端口号的对应关系,但前提是你得从建主机前就开始监听……

下面是同学加入我主机时发过来的一个TCP包

00000000  F7 1E 32 00 02 00 00 00  C4 D4 85 03 00 E0 17 01   ..2..... ........
00000010  00 00 00 57 6F 72 6C 64  43 72 65 61 74 65 72 00   ...World Creater.
00000020  01 00 02 00 17 E0 3A 14  58 21 00 00 00 00 00 00   ......:. X!......
00000030  00 00                                              ..
从上面可以看到用户名就是World Creater

 

挺邪恶的,有兴趣的就研究下……


本文提到的工具下载:

抓包工具:

WSockExpert

http://download.csdn.net/source/1820067

SmartSniff

http://download.csdn.net/source/1820078


 

附上我写一个样本lancraft,里面集成了简单的MH功能

WC3TOOL

http://download.csdn.net/source/1819854

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值