`
xinyu126
  • 浏览: 2374 次
  • 性别: Icon_minigender_1
  • 来自: 长沙->大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

魔兽搜索器的反过程--魔兽发布器,java版

阅读更多
想必玩魔兽的人都玩过浩方。玩魔兽的同学都用过魔兽搜索器。浩方的就复杂了,魔兽搜索器的原理就简单多了。这里我不多讲搜索器。就简单说说原理。

魔兽端口:6112

有必要介绍一下魔兽的数据包:(UDP包)
1,搜索包。交流的信息是“喂:你建图了吗??”
当建立了地图的主机收到这个包的时候就会把自己的地图返回给他,这个包我叫他地图包。

2,地图包。交流的信息是“这是我建立的图,好好看看吧”。
这个包里面有地图信息,人数,电脑数等。都是有用的信息。
收到这个包的魔兽就能看到熟悉的“本地局域网游戏……”

3,主机发布包。交流的信息是“我建图了,大家快来看呀!!”
这个是主机广播的。收到这个包的魔兽都会回答一个包。就是那个搜索包。

为什么魔兽就能在一个局域网中能看到呢??
因为这些包都是以255.255.255.255这个地址广播的。
所以只要把这些包突破这个255就能实现和外网联机。

搜索器:
搜索器的原理就是向其他的ip地址发送 搜索包。这样把主机的地图包骗过来。抛砖引玉的效果。
骗到了地图包,也就知道了主机在哪。可以和主机建立tcp连接。然后就是骗自己的魔兽。
把收到的地图包发送给自己,魔兽就乖乖的把它显示在熟悉的“本地局域网游戏……”
加入游戏的时候就是和自己建立tcp连接。

这时候的tcp连接时 自己---搜索器---主机 。如果游戏中关闭收索器。那么就over了。断开连接。

搜索器就分析到这。

发布器:
原理:
主机向各IP发布主机发布包
客户机收到之后自然就会回复一个搜索包。注意这个搜索包是魔兽自己回复的,当然是回复给发布器。
发布器把地图包返回给他。
客服看到游戏。
建立tcp联机。
这时候的tcp连接是:魔兽-魔兽。没有中间的发布器。

如何获取地图包?
给自己主机发送搜索包。

为什么不要客户机能直接和魔兽建立tcp?
因为在地图包里面包含有魔兽的端口信息(6112)。魔兽会连接到主机ip+6112端口的。这就和魔兽发布器无关的原因。发布器只是引导一下udp包。

这个中间少了很多东西。不需要每个人都在发搜索包收索谁建立主机。只要主机一个人发。游戏中也不需要别人转接什么tcp了·~

java实现很容易了,在加入聊天功能。

实现魔兽千人房也不是问题。(因为根本不存在房间的概念,所有的人都在这个房间)

开源地址:http://code.google.com/p/warpuber/
代码发布密码:ZZ7Kr3qd7zq3

目前基本功能实现,开发不是很全。希望有人关注,和我一起完善。



感谢关注的人。用这个方法实现魔兽联机确实是一条捷径。要用收索器有个很大的难题。
就是 魔兽--搜索器--魔兽 这个中间代理很不好做。
需要抓包分析,网络底层……
java是很难实现的,c++用spi能实现,我现在就想把搜索和发布的功能都实现。


还是有好多人没看明白。编程人就用程序说话吧。临时写一个测试文件,自己研究研究吧!
/**
 * 运行这个你就知道什么原理了。
 *1.打开魔兽1.20
 *2.建立地图。任意。
 *3.运行这个
 *4.取消地图。
 */
package test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import xinyu126.common.DataContainer;

/**
 * @author xinyu126
 *
 */
public class TestWar {
	public static byte[] warSearch = { (byte) 0xf7, 0x2f, 0x10, 0x00, 0x50, 0x58, 0x33, 0x57, 0x14, 0x00, 0x00, 0x00,
			0x00, 0x00, 0x00, 0x00 };
	public static byte[] warPublish = { (byte) 0xF7, 0x32, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
			0x0A, 0x00, 0x00, 0x00 };
	class Server implements Runnable{
		public void run(){
			while (p == null) {
				//2  监听包
				//获取地图包
				//因为我给我自己发了搜索包。所以我自己的魔兽会乖乖的给我地图包。
				try {
					server.receive(packet);
					
					byte[] data = packet.getData();
					//这里是换地图的显示信息
					byte[] mm = "test play dota".getBytes();
					mm = new String(mm).getBytes("utf-8");
					int len = mm.length > 31 ? 31 : mm.length;
					for (int i = 0; i < len; i++) {
						 data[20 + i] = mm[i];
					}
					//换完了
					p = new DatagramPacket(data, packet.getLength(), ip, 6112);
					System.out.println("shoudao" + new String(data));
				} catch (IOException e) {
				}
				
			}
			while (p != null) {
			//3收到了后。发送给自己
			//这就能看到自己建的地图了。但是不能加入,因为是假的!
			//要是不发送给自己,那么就换个ip地址发送吧。那么别人会看到1-2个你。为甚呢??自己想去
			// 
				try {
					Thread.sleep(3000);
					server.send(pub);
					// server.receive(packet);
					Thread.sleep(1000);
					server.send(p);
					
				} catch (InterruptedException e) {
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("发送!!");
			}
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new TestWar();

	}

	DatagramSocket server;
	DatagramPacket packet, pub, p;
	byte[] data;
	InetAddress ip;
	TestWar() {
		try {
		//6113  随便开的端口
		//6112  魔兽端口。不能随便呀!
			server = new DatagramSocket(6113);
			ip = InetAddress.getLocalHost();
			packet = new DatagramPacket(warSearch, 16, ip, 6112);
			pub = new DatagramPacket(warPublish, 16, ip, 6112);
			//1-----发送搜索包。这里就开始骗人了!~~哈哈
			server.send(packet);
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

		data = new byte[1024];
		packet = new DatagramPacket(data, data.length);
		p = null;
		new Thread(new Server()).start();
	}

}



运行效果


10.31 回答c-j的问题(第三页最后一楼)
这里在作为一个说明:
我想很多人都没有发现的一个捷径。这也是为什么我这个方法不用抓包的原因。

因为地图包的最后两个字节包含端口信息!
所以无论什么端口发给魔兽。魔兽都能正确判断游戏主机的端口!!
我用6113端口为例吧。我做的程序也是6113端口。
例如我是用6113端口给魔兽6112端口发送地图包。
但是魔兽tcp会连接到6112端口去。而不是6113。这点是关键所在!
在UDP包的收发中魔兽收到6113的UDP包后,会把回复发送给6113端口。
但是魔兽解析地图的时候会忽略6113端口。而采用地图包里面的信息6112.


另外魔兽的6112端口是可以自己设置的。刚进魔兽的时候可以修改。这一点,也就必须让魔兽把端口号放在地图包里面。

所以只要能让魔兽收到 ip+地图包。就能保证联机。tcp就可以不用管。
  • 大小: 43.7 KB
分享到:
评论
28 楼 C_J 2009-10-30  
xinyu126 写道
C_J 写道

恩,之前我的理解有些偏差...现在觉得也只是更改UDP包的source port就可以了,TCP通讯不用管..我想JAVA的Socket应
不知道楼主是否伪造过UDP包发送过,源port地址为游戏端口6112,并是否能成功建立连接???


这个我都伪造过。就是给整个宿舍楼建立了一个假魔兽主机。大家一进魔兽就看到有人建主。就是不能加入。

我还是在帖子里面详细说明一下吧。这个程序的主要原理。


哦,想起来了,当年我好像也是你这种情况.

你把你的Socket构造UDP包代码贴出来看看..
27 楼 xinyu126 2009-10-30  
C_J 写道

恩,之前我的理解有些偏差...现在觉得也只是更改UDP包的source port就可以了,TCP通讯不用管..我想JAVA的Socket应
不知道楼主是否伪造过UDP包发送过,源port地址为游戏端口6112,并是否能成功建立连接???


这个我都伪造过。就是给整个宿舍楼建立了一个假魔兽主机。大家一进魔兽就看到有人建主。就是不能加入。

我还是在帖子里面详细说明一下吧。这个程序的主要原理。
26 楼 C_J 2009-10-30  
LK.Bing 写道
恩,我是魔兽爱好者,刚大学毕业,以前就用魔兽搜索器来搜索学校主机来玩.可是一直不明白怎么回事,.那个魔兽搜索器不知道用什么做出来的300K左右,只能有搜索功能,不能聊天. 还不怎么好用,希望楼主开发一个更好用的出来. 还有我其实好早就想做一个魔兽改键,用JAVA做,一直不知道从哪里入手. 楼主要是有兴趣,可以教教我,我们一起做好不.


JAVA是很难做出监听系统级的按键消息的~~~
25 楼 C_J 2009-10-30  
xinyu126 写道
C_J 写道
那个主机互联不是简单更改UDP就可以的,底层的通讯是建立在协议上的...

而UDP和TCP同是网络层的两种协议...是建立在自己的协议栈上的...

关键是建立TCP连接,而非更改UDP包,UDP包只负责前期的地图信息传送和寻主,真正建立连接的TCP

有意向合作,但是最近还是有点忙,Email我吧:cj.yangjun@gmail.com

但是 我认为,魔兽的tcp的连接是在UDP的引导下完成的。所以只要把UDP修改。tcp就自然跟上了。这个观点我现在还没有出现过意外。


恩,之前我的理解有些偏差...现在觉得也只是更改UDP包的source port就可以了,TCP通讯不用管..我想JAVA的Socket应该可以.....

在博客中记录的WAR3搜索主机的UDP包如下:

F7 2F 10 00 50 58 33 57  14 00 00 00 00 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 01 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 02 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 03 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 04 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 05 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 06 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 07 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 08 00 00 00 
F7 2F 10 00 50 58 33 57  14 00 00 00 09 00 00 00 


不知道楼主是否伪造过UDP包发送过,源port地址为游戏端口6112,并是否能成功建立连接???
24 楼 LK.Bing 2009-10-30  
恩,我是魔兽爱好者,刚大学毕业,以前就用魔兽搜索器来搜索学校主机来玩.可是一直不明白怎么回事,.那个魔兽搜索器不知道用什么做出来的300K左右,只能有搜索功能,不能聊天. 还不怎么好用,希望楼主开发一个更好用的出来. 还有我其实好早就想做一个魔兽改键,用JAVA做,一直不知道从哪里入手. 楼主要是有兴趣,可以教教我,我们一起做好不.
23 楼 zjhlht 2009-10-29  
要是能用JAVA出一个魔兽的地图编辑器,那这个就HIGH了,可以自己弄个RPG啊、TD啊之类的
22 楼 xinyu126 2009-10-29  
我现在做的也就是简单的UDP包实现的。完全没理tcp。
21 楼 xinyu126 2009-10-29  
C_J 写道
那个主机互联不是简单更改UDP就可以的,底层的通讯是建立在协议上的...

而UDP和TCP同是网络层的两种协议...是建立在自己的协议栈上的...

关键是建立TCP连接,而非更改UDP包,UDP包只负责前期的地图信息传送和寻主,真正建立连接的TCP

有意向合作,但是最近还是有点忙,Email我吧:cj.yangjun@gmail.com

但是 我认为,魔兽的tcp的连接是在UDP的引导下完成的。所以只要把UDP修改。tcp就自然跟上了。这个观点我现在还没有出现过意外。
20 楼 C_J 2009-10-29  
那个主机互联不是简单更改UDP就可以的,底层的通讯是建立在协议上的...

而UDP和TCP同是网络层的两种协议...是建立在自己的协议栈上的...

关键是建立TCP连接,而非更改UDP包,UDP包只负责前期的地图信息传送和寻主,真正建立连接的TCP

有意向合作,但是最近还是有点忙,Email我吧:cj.yangjun@gmail.com
19 楼 myreligion 2009-10-29  
myreligion 写道
tedeyang 写道
很有意思的作品,不过我一直在奇怪,有存在的必要吗?用浩方,用vs都可以满足你的游戏要求(另外,我孤陋寡闻啊,玩了7、8年warcraft都没听说过魔兽搜索器,:) )。
后来去googlecode看了才明白,原来楼主是学生啊,大概是机房里不能上外网,就像我们当年玩星际一样。
两个建议:1,把文章再组织一下,软件需求、设计思路、用例、实现等等,这样脉络更清晰。
          2,和IM结合起来,如qq、msn之类的,不要自己去实现聊天功能了。


我在大学那会刚好就拿swing写了一个聊天软件,也走的udp,说不好能和楼主的东西合在一起用啊~~~


没用的截图,回短消息使用。
18 楼 xinyu126 2009-10-28  
C_J 写道
-我也是WAR3爱好者,07年在学校,我也研究过一番,后来因为对网络底层不太熟就没继续下去了..

-后来收到网上很多仁兄的Email询问,有位大哥也写了一个未完成的C代码给我,但很遗憾,因为时间关系,也没有继续了``

-今天突然看到楼主的帖子,有点兴奋,并想一同完成...

在博客里留下了当年对"搜索器"的分析...http://c-j.iteye.com/blog/364532

非常欢迎!
我现在就想把搜索功能和发布功能都同时实现!
最好用windows的语言重写
17 楼 C_J 2009-10-28  
-我也是WAR3爱好者,07年在学校,我也研究过一番,后来因为对网络底层不太熟就没继续下去了..

-后来收到网上很多仁兄的Email询问,有位大哥也写了一个未完成的C代码给我,但很遗憾,因为时间关系,也没有继续了``

-今天突然看到楼主的帖子,有点兴奋,并想一同完成...

在博客里留下了当年对"搜索器"的分析...http://c-j.iteye.com/blog/364532
16 楼 blareck 2009-10-28  
下来学习下!我都很少玩这个了,楼主能在游戏里想到这些东西,很值得学习啊!
15 楼 xinyu126 2009-10-28  
sonyfe25cp 写道
为什么不在学校里用 pvpgn那个呢?结合mysql搭建一个简单的battle-net,就可以实现多人局域网联机了。

在学校建立这个主机?还是由学生个人机器建立??
14 楼 sonyfe25cp 2009-10-27  
为什么不在学校里用 pvpgn那个呢?结合mysql搭建一个简单的battle-net,就可以实现多人局域网联机了。
13 楼 xinyu126 2009-10-27  
myreligion 写道


我在大学那会刚好就拿swing写了一个聊天软件,也走的udp,说不好能和楼主的东西合在一起用啊~~~


好呀!非常赞同! 
/**
*非常好。我也就是觉得要好好做,东西太多了。。
*这样子便利!谢谢啦!
*/
12 楼 myreligion 2009-10-27  
tedeyang 写道
很有意思的作品,不过我一直在奇怪,有存在的必要吗?用浩方,用vs都可以满足你的游戏要求(另外,我孤陋寡闻啊,玩了7、8年warcraft都没听说过魔兽搜索器,:) )。
后来去googlecode看了才明白,原来楼主是学生啊,大概是机房里不能上外网,就像我们当年玩星际一样。
两个建议:1,把文章再组织一下,软件需求、设计思路、用例、实现等等,这样脉络更清晰。
          2,和IM结合起来,如qq、msn之类的,不要自己去实现聊天功能了。


我在大学那会刚好就拿swing写了一个聊天软件,也走的udp,说不好能和楼主的东西合在一起用啊~~~
11 楼 absolute007 2009-10-27  
楼主很强大,受教了
10 楼 xinyu126 2009-10-26  
cjmcn-sh 写道
确实不错,原来在学校的时候晚上到了11点就断网了。只能依靠局域网玩模式。曾经也研究过包,不过没成功,当然,我的整体想法就不对。我用winpcap捕获数据包再转发。。。

先读代码,看包结构了。


我起先也是想抓包。但是java很不适合做这种底层的活。而且抓包就得所有的包都看一遍。还得个个包分析。很不划算。

我的代码有点乱。。。新手。。
多提提意见。。

其实我很想找人一起做。。一个人太累了。
9 楼 cjmcn-sh 2009-10-26  
确实不错,原来在学校的时候晚上到了11点就断网了。只能依靠局域网玩模式。曾经也研究过包,不过没成功,当然,我的整体想法就不对。我用winpcap捕获数据包再转发。。。

先读代码,看包结构了。

相关推荐

    很强大的魔兽局域网搜索器

    总结一下,魔兽局域网搜索器是魔兽争霸玩家在局域网环境下的得力助手,它简化了寻找和加入游戏服务器的过程,利用IP地址的特性进行高效扫描,并通过友好的用户界面呈现结果。然而,正确和合理的使用方式是享受这一...

    纯java写的魔兽联机源码!绝对的好东西!

    java 魔兽搜索器 魔兽对战平台 源码 warpuber 纯java写的魔兽联机源码!绝对的好东西! 里面有许多注释.应该能看懂. 关于原理.博客上有详细介绍.http://blog.csdn.net/xinrui5577/archive/2009/09/16/4560590.aspx...

    迷你版魔兽Java源码

    迷你版魔兽Java源码是一个基于Java编程语言实现的简化版魔兽世界游戏项目。这个项目旨在为开发者提供一个学习和理解游戏开发基础的平台,特别是针对Java编程和游戏引擎设计的学生或者爱好者。通过研究这个源码,你...

    warpuber java 魔兽对战平台

    这是一个纯java写的魔兽对战平台.不抓包.原理非常简单. 可以聊天,可以发布自己的魔兽主机.有人建立主机或者人满了也会有声音提示. 学习网络编程.非常好! 里面有许多注释.应该能看懂. 关于原理.博客上有详细介绍....

    java实现的魔兽世界论坛系统

    java实现的魔兽世界NGA论坛,仅有注册登录发帖回帖功能。基于Hibernate+Struts。因为文件过大,所以我上传时删掉了lib下面的jar包,请大家讲hibernate和struts相关的jar包添加进去再运行。

    MyWarCraft魔兽争霸资源提取器

    《MyWarCraft魔兽争霸资源提取器》是一款专为魔兽争霸玩家设计的实用工具,它能够帮助用户方便地从游戏客户端中提取各种资源,包括模型、音效、图像、地图等,以便于玩家进行自定义地图制作、mod开发或游戏内容研究...

    魔兽转换器

    《魔兽转换器》详解 魔兽转换器是一款专为魔兽争霸III:冰封王座(Warcraft III: The Frozen ...在使用过程中遇到任何问题,都可以通过网络搜索解决方案,或者在相关的玩家论坛寻求帮助,共同维护和谐的游戏环境。

    魔兽争霸平台地图内装备ID提取工具

    《魔兽争霸平台地图内装备ID提取工具》是专为魔兽争霸玩家和地图编辑者设计的一款实用软件,主要用于从魔兽争霸地图文件中提取装备的唯一标识符(ID)。这个工具能够帮助用户快速查找并分析游戏地图中的装备信息,...

    局域游戏网连接器,可供局域网CS 魔兽等使用

    局域游戏网连接器是一种专为局域网内的多人在线游戏设计的工具,它使得玩家无需直接修改本机IP地址就能方便地连接到同一网络下的游戏服务器,如CS(反恐精英)和魔兽争霸等经典游戏。这款软件的核心功能在于简化了...

    魔兽地图下载器 极速魔兽地图下载器 v3.0

    使用该下载器时,用户只需点击“搜索地图”按钮,或者选择上方的特定地图类型,如“原创地图”或“防守地图”,即可启动下载过程。软件会自动显示出一个进度条,实时显示下载进度。下载速度则由用户的网络环境决定,...

    魔兽1.24E内置字符串转换函数 以及 查找方法

    首先,我们要了解的是魔兽争霸III中的JASS(Jass Scripting Language)语言,它是一种专为地图编辑器设计的脚本语言。在JASS中,字符串处理是非常常见的任务,涉及到字符串类型(JString)、字符串索引以及C语言的`...

    兽魔兽世界模板HTML

    这款模板以其独特的魔兽世界元素、精心设计的布局和丰富的交互功能,让访问者仿佛置身于艾泽拉斯大陆之中。 在网页设计中,模板是一个重要的工具,它为设计师提供了快速构建网页的基础结构。《兽魔兽世界模板HTML》...

    魔兽超级好用的DBC工具WDBX.Editor.rar

    《魔兽世界:DBC工具WDBX.Editor详解及应用》 在魔兽世界的游戏开发与研究领域,DBC(Database Compact)文件是至关重要的数据存储格式,它包含了游戏中的各种模型、技能、特效以及图标等核心信息。而WDBX.Editor是...

    魔兽争霸窗口自定义运行工具源码VB版.rar

    程序务必放在魔兽争霸安装目录,将会自动搜索文件哦,否则需要自己填写路径;当游戏窗口激活并鼠标进入游戏时自动时,就会自动限制区域,这时可以拖动窗口位置。  有几个技巧对新手也许有用,高手请路过不要抛砖呀...

    局域网修改器WAR3

    【局域网修改器WAR3】是一款专为魔兽争霸(Warcraft III)设计的辅助工具,主要用于局域网游戏环境中的玩家自定义调整。在面对强大的单机AI对手时,玩家可以通过这款修改器来调整自己的英雄属性,提高游戏体验。在...

    PJBlog3 魔兽世界模板

    这个模板基于PJBlog3平台,一个流行的内容管理系统(CMS),它允许用户轻松地创建、管理和发布关于魔兽世界的相关内容,如游戏攻略、角色扮演故事、玩家心得等。 【描述】"PJBlog3 魔兽世界模板"的设计理念是将魔兽...

    yii 实现魔兽世界排名网站源码

    4. 装备查询:这个功能允许用户搜索和对比不同的游戏装备。可能需要建立一个装备数据库,包含装备属性、等级、来源等信息,并提供过滤和排序功能。可以利用Yii的查询构建器来构建复杂的查询语句。 5. 用户认证与...

    魔兽rpg编程 脚本 j文件编辑 Jass shop

    当首次运行JassShopPro的时候,如果没有找到这个文件,程序会自动搜索并提问是否使用语言包(语言包有特殊的设定,如果是某些英文版改的中文版xp的或者新加坡中文版之类,不会自动提问CHS.lng)功能 语法高亮 根据...

    论如何在dota2中使用war3静态模型1

    - 魔兽模型观察器:用于将BLP格式的贴图转换为TGA格式,因为Dota 2不支持BLP。 2. **模型和贴图准备**: - 提取MDX模型和对应的BLP贴图,使用魔兽模型观察器将BLP转为TGA。 - 将TGA贴图放置在Dota 2的指定目录下...

    OJ魔兽世界三道题的c++源代码(程序设计与算法课程大作业).zip

    【标题】中的“OJ魔兽世界三道题的c++源代码”指的是在线判题系统(Online Judge,简称OJ)上的三道与魔兽世界相关的编程题目,这些题目可能涉及游戏内的逻辑、数据结构或者算法问题。源代码是用C++编程语言编写的,...

Global site tag (gtag.js) - Google Analytics