光晕2如何实现光晕局域网联机对战、现在还有服务器么?帮帮忙...

目的:想实现一个类似浩方的虚拟局域网的游戏对战客户端,但不同于浩方的IPX/SPX,希望采用UDP方式。看了很多文章,也做了一些实验,也有很多问题。现在整理出来,跟大家探讨一下,也希望能得到高手的指点。
背景知识:
星际启动时***本地UDP端口。6111用于发送广播,发现游戏主机;6112用于发送游戏进行中的同步数据。
假设局域网中有192.168.1.6创建了游戏,当192.168.1.24进入游戏时,会发送UDP广播;192.168.1.8收到该广播后会回应192.168.1.24;此后双方直接发送交互数据包。&
星际是局域网游戏(不包括战网),是因为UDP广播所能覆盖的区域只能是一个子网段。现在的目的就是组建一个虚拟局域网,让互联网上的玩家能够通过虚拟局域网发现彼此。
解决思路:
发送过程:采用进程注入和socket&hook技术,把我们自行编写的一个DLL注入到星际进程,该DLL代表星际创建另外一个UDP端口7890。&星际启动时,会发送广播数据包查找局域网内的游戏主机。注入的DLL通过Hook&sendto调用可以截获这个数据包,后把内容添加一个自定义的协议首部,通过UDP&7890端口发送到外网。
接收过程:发到外网的UDP数据包通过NAT到达内网机器10.10.40.32的7890端口。注入的DLL对该数据包的自定义协议首部进行分析,然后将去掉首部后的数据(原始星际数据包)发送给6111端口。这样就完成了接收的过程。
整个过程如下:(SC:&Starcraft,SC1代表内网机器192.168.1.6,SC2代表10.10.40.32)
&&&&&&&&&&广播找主机&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&加入首部
SC1:6111&------------&&Hook&--&&我们的DLL:7890&------------&&Internet&
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&去掉首部
Internet&------------&&我们的DLL:7890&------------&&SC2:6111&
目前发送过程通过远程进程注入CreateRemoteThread以及API&Hook技术已经解决。问题在于接收过程。10.10.40.32上的DLL如何将数据从7890传递到6111端口?才能让星际以为这个数据包是从本局域网的其它IP地址传递过来的?比如从10.10.40.33?
当有10个人在发送广播数据包到10.10.40.32的7890时,如何模拟出同一个子网的10台机器出来?
目前浩方,&VS,GG-Client都有虚拟IP的概念,如何应用虚拟IP来解决这个问题呢?
百思不得其解,望高手赐教!!!
回复讨论(解决方案)
eee,我有个小弟做过类似的公司&我问问
关注。。。
今天又研究了一天,还是没有什么收获。
拟采用Raw&Socket的办法,通过修改发送者的源地址来实现虚拟IP,结果
WinXP限制对Raw&Socket的使用,无法发送非法源IP地址的UDP数据包。
现在手头只有最笨的办法,就是建立一个虚拟网卡,类似Hamachi和Open***的方式。
不过这种方法给用户的感觉不好,所以放弃不用。
欢迎大家讨论!我的QQ:&,谢谢!
这也和网关设置有关系吗?
我最近也想做类似的东西,但尝试利用API&Hook将我写的socket&dll注入星际进程后,星际启动到选择&UDP连接&后就提示&网络初始化失败&.楼主能否给介绍点经验.
谢谢!(能给点例子代码更好).
10.10.40.32的7890端口在接收到数据后记录下远程地址,并给这个地址分配一个虚拟IP,把虚拟IP传送到星际游戏中,发送的时候再用这个虚拟IP查找所对应的远程地址来发送.
关注,也想研究研究
raw&socket&行不通!不过可以用wincap来开发!!!更改其源地址!!!
加精,吸引N人进来交流。
没有研究过。不过以前在学校见他们建过一个类似浩方服务器,也有个类似浩方客户端,软件名称叫啥忘了,估计是用UDP打洞原理。
过来学习一下.
目的:想实现一个类似浩方的虚拟局域网的游戏对战客户端,但不同于浩方的IPX/SPX,希望采用UDP方式。看了很多文章,也做了一些实验,也有很多问题。现在整理出来,跟大家探讨一下,也希望能得到高手的指点。
&背景知识:
&星际启动时***本地UDP端口。6111用于发送广播,发现游戏主机;6112用于发送游戏进行中的同步数据。
&假设局域网中有192.168.1.6创建了游戏,当192.168.1.24进入游戏时,会发送UDP广播;192.168.1.8收到该广播后会回应192.168.1.24;此后双方直接发送交互数据包。
&星际是局域网游戏(不包括战网),是因为UDP广播所能覆盖的区域只能是一个子网段。现在的目的就是组建一个虚拟局域网,让互联网上的玩家能够通过虚拟局域网发现彼此。
&解决思路:
&发送过程:采用进程注入和socket&&&hook技术,把我们自行编写的一个DLL注入到星际进程,该DLL代表星际创建另外一个UDP端口7890。&&&星际启动时,会发送广播数据包查找局域网内的游戏主机。注入的DLL通过Hook&&&sendto调用可以截获这个数据包,后把内容添加一个自定义的协议首部,通过UDP&&&7890端口发送到外网。
&接收过程:发到外网的UDP数据包通过NAT到达内网机器10.10.40.32的7890端口。注入的DLL对该数据包的自定义协议首部进行分析,然后将去掉首部后的数据(原始星际数据包)发送给6111端口。这样就完成了接收的过程。
&整个过程如下:(SC:&&&Starcraft,SC1代表内网机器192.168.1.6,SC2代表10.10.40.32)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&广播找主机&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&加入首部
&SC1:6111&&&------------&&&&&Hook&&&--&&&&&我们的DLL:7890&&&------------&&&&&Internet
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&去掉首部
&Internet&&&------------&&&&&我们的DLL:7890&&&------------&&&&&SC2:6111
&目前发送过程通过远程进程注入CreateRemoteThread以及API&&&Hook技术已经解决。问题在于接收过程。10.10.40.32上的DLL如何将数据从7890传递到6111端口?才能让星际以为这个数据包是从本局域网的其它IP地址传递过来的?比如从10.10.40.33?
答:方法1.&要在UDP的下层(例始IP层),数据包目的port由7890修改成6111,然后往UDP上层传送。
方法2.&数据包目的port由7890修改成6111,再次转发到本机的***网卡的接收队列中,由于IP层路由,会自动接收。
&当有10个人在发送广播数据包到10.10.40.32的7890时,如何模拟出同一个子网的10台机器出来?
&答:你的意思是在Internet上模拟出同一个子网的10台计算机?参考***的做法。我认为要做个网卡驱动,可以形成一个虚拟网卡,那么虚拟网卡就能配置一个IP。原理参考***。
&目前浩方,&&&VS,GG-Client都有虚拟IP的概念,如何应用虚拟IP来解决这个问题呢?
&百思不得其解,望高手赐教!!!
10.10.40.32的7890端口在接收到数据后记录下远程地址,并给这个地址分配一个虚拟IP,把虚拟IP传送到星际游戏中,发送的时候再用这个虚拟IP查找所对应的远程地址来发送.
这种思路很好。
***的最基本思想是选路原理。
楼主看看继续使用以前到端口发送出去,看看能不能实现。接收的时候,我们在hook函数里面先调用系统原有的revcv函数把数据接收到手,再把来源地址改一下。&
关于怎么样虚拟&10个&ip的问题,还是服务器来协调吧,然后每台机器上保存一个nat表。
下面的流程,能不能实现呀?&等待楼主好消息:-)
================================
SC1:6111&&------------&&&&&Hook&&--&&&&&我们的DLL:6111&&------------&&&&&Internet
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&去掉首部
Internet&&------------&&&&&我们的DLL:6111&&-》&recv&hook&------------&&&&&SC2:6111&
本人的对战平台,免费架设,欢迎加盟
看起来有空我可以几篇长篇,来聊聊对战平台的实现
15楼的说的很近了
其实是在&recv&的时候改地址的,欺骗游戏包是从虚拟地址发来的
至于&raw&socket&之类的就别想了
***&的话更是另外一种实现方式了
很有启发,受教受教!
看不懂。java能实现不。感觉好像不行。23.62G 类型:角色扮演语言:英文时间:日
6.12G 类型:动作射击语言:中文时间:2010年
3.50G3.51G300KB29KB581KB
35.16G1.56G2.05G2.63G1.19G
周热门资讯
周热门大作

参考资料

 

随机推荐