该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-29
C_J 写道 那个主机互联不是简单更改UDP就可以的,底层的通讯是建立在协议上的...
而UDP和TCP同是网络层的两种协议...是建立在自己的协议栈上的... 关键是建立TCP连接,而非更改UDP包,UDP包只负责前期的地图信息传送和寻主,真正建立连接的TCP 有意向合作,但是最近还是有点忙,Email我吧:cj.yangjun@gmail.com 但是 我认为,魔兽的tcp的连接是在UDP的引导下完成的。所以只要把UDP修改。tcp就自然跟上了。这个观点我现在还没有出现过意外。 |
|
返回顶楼 | |
发表时间:2009-10-29
我现在做的也就是简单的UDP包实现的。完全没理tcp。
|
|
返回顶楼 | |
发表时间:2009-10-29
要是能用JAVA出一个魔兽的地图编辑器,那这个就HIGH了,可以自己弄个RPG啊、TD啊之类的
|
|
返回顶楼 | |
发表时间:2009-10-30
恩,我是魔兽爱好者,刚大学毕业,以前就用魔兽搜索器来搜索学校主机来玩.可是一直不明白怎么回事,.那个魔兽搜索器不知道用什么做出来的300K左右,只能有搜索功能,不能聊天. 还不怎么好用,希望楼主开发一个更好用的出来. 还有我其实好早就想做一个魔兽改键,用JAVA做,一直不知道从哪里入手. 楼主要是有兴趣,可以教教我,我们一起做好不.
|
|
返回顶楼 | |
发表时间:2009-10-30
最后修改: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,并是否能成功建立连接??? |
|
返回顶楼 | |
发表时间:2009-10-30
最后修改:2009-10-30
LK.Bing 写道 恩,我是魔兽爱好者,刚大学毕业,以前就用魔兽搜索器来搜索学校主机来玩.可是一直不明白怎么回事,.那个魔兽搜索器不知道用什么做出来的300K左右,只能有搜索功能,不能聊天. 还不怎么好用,希望楼主开发一个更好用的出来. 还有我其实好早就想做一个魔兽改键,用JAVA做,一直不知道从哪里入手. 楼主要是有兴趣,可以教教我,我们一起做好不.
JAVA是很难做出监听系统级的按键消息的~~~ |
|
返回顶楼 | |
发表时间:2009-10-30
C_J 写道 恩,之前我的理解有些偏差...现在觉得也只是更改UDP包的source port就可以了,TCP通讯不用管..我想JAVA的Socket应 不知道楼主是否伪造过UDP包发送过,源port地址为游戏端口6112,并是否能成功建立连接??? 这个我都伪造过。就是给整个宿舍楼建立了一个假魔兽主机。大家一进魔兽就看到有人建主。就是不能加入。 我还是在帖子里面详细说明一下吧。这个程序的主要原理。 |
|
返回顶楼 | |
发表时间:2009-10-30
xinyu126 写道 C_J 写道 恩,之前我的理解有些偏差...现在觉得也只是更改UDP包的source port就可以了,TCP通讯不用管..我想JAVA的Socket应 不知道楼主是否伪造过UDP包发送过,源port地址为游戏端口6112,并是否能成功建立连接??? 这个我都伪造过。就是给整个宿舍楼建立了一个假魔兽主机。大家一进魔兽就看到有人建主。就是不能加入。 我还是在帖子里面详细说明一下吧。这个程序的主要原理。 哦,想起来了,当年我好像也是你这种情况. 你把你的Socket构造UDP包代码贴出来看看.. |
|
返回顶楼 | |
发表时间:2009-10-30
最后修改:2009-10-30
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); -看到代码,实际上你是没有更改发送UDP包的源端口的..,而是开启的6113端口( server = new DatagramSocket(6113); ) -所以远程主机返回的UDP包是发送给你本地的6113,所以你需要监听6113端口,再转发给6112端口的WAR3进程.(我之前也是你这个思路.... -这种思路带来的问题是本地的6112端口的WAR3进程收到你骗过来的UDP包后只知道是本地6113端口发送过来的,而并不知道远程主机..这样游戏的所有UDP和TCP包你都必须转发. 所以可以换个思路,在发送UDP pub包的时候,就更改UDP包的源发送端口为6112,而非6113端口!!这是重点,但是貌似JAVA要伪造端口很难.. 如果无法实现的话,那就只能那样做了,不过聊天的功能并不依赖游戏本身,就完全可以开个端口来通讯了`` |
|
返回顶楼 | |
发表时间:2009-10-31
C_J 写道 -看到代码,实际上你是没有更改发送UDP包的源端口的..,而是开启的6113端口( server = new DatagramSocket(6113); ) -所以远程主机返回的UDP包是发送给你本地的6113,所以你需要监听6113端口,再转发给6112端口的WAR3进程.(我之前也是你这个思路.... -这种思路带来的问题是本地的6112端口的WAR3进程收到你骗过来的UDP包后只知道是本地6113端口发送过来的,而并不知道远程主机..这样游戏的所有UDP和TCP包你都必须转发. 所以可以换个思路,在发送UDP pub包的时候,就更改UDP包的源发送端口为6112,而非6113端口!!这是重点,但是貌似JAVA要伪造端口很难.. 如果无法实现的话,那就只能那样做了,不过聊天的功能并不依赖游戏本身,就完全可以开个端口来通讯了`` 关键在这::::=========== C_J 写道 关键::-这种思路带来的问题是本地的6112端口的WAR3进程收到你骗过来的UDP包后只知道是本地6113端口发送过来的,而并不知道远程主机..这样游戏的所有UDP和TCP包你都必须转发. 回到原文:: xinyu26 写道 为什么不要客户机能直接和魔兽建立tcp?
因为在地图包里面包含有魔兽的端口信息(6112)。魔兽会连接到主机ip+6112端口的。这就和魔兽发布器无关的原因。发布器只是引导一下udp包。 因为地图包的最后两个字节包含端口信息! 所以无论什么端口发给魔兽。魔兽都能正确判断游戏主机的端口!! 例如我是用6113端口给魔兽6112端口发送地图包。 但是魔兽会连接到6112端口去。而不是6113。这点是关键所在! |
|
返回顶楼 | |