问题
我的一些朋友玩一个游戏,最多涉及4名玩家。我正在尝试写一个程序,它将允许第五个人监控游戏中正在发生的事情,而不是在游戏中。
背景
游戏的多人部分功能如下:
一个玩家被指定为“主人”。所有其他玩家通过输入主机的ip地址连接到主机。主机负责控制游戏的AI。当游戏中发生事件时,游戏的主机副本将事件发送给其他每个玩家的游戏(客户端)。如果客户端玩家执行某个操作,则他们的游戏将该动作发送给主机,而主机又将其发送给其他玩家,以便任何玩家的动作对所有其他玩家都是可见的。主机和客户端都使用游戏的配置文件(例如:端口58282)中预定义的一个TCP端口。这个游戏是一个实时策略游戏(不是基于转弯的)。
约束
问题
是否有一种方法可以让一个单独的程序在主机或客户端计算机上运行,侦听游戏的端口(游戏正在进行)?我知道TCP只允许每个ip地址每个端口一个套接字,所以让游戏和单独的程序同时监听同一个端口是有问题的。假设我在游戏前启动外部应用程序,并让应用程序监听游戏的端口,有什么方法可以让应用程序通过游戏端口听到主机的声音,获取/复制该信息,然后将其转发到游戏中?(有点像当地的中间人)
终极问题
考虑到这些限制,这有可能吗?我要用最好的方式去做吗?
发布于 2013-02-15 21:59:11
我先回答第二个问题。你走错方向了。正确的方法是在服务器中实现一些功能,允许一个单独的“客户端”连接到另一个端口上,定期收集统计信息。
有什么方法可以让应用程序听到主机通过游戏端口,获取/复制信息,然后转发到游戏吗?
你不需要做mitm。您可以使用像tcpdump或wireshark这样无处不在的方法来实现简单的数据包捕获。例如,要捕获TCP端口上的所有内容:
tcpdump -n -w capture.pcap tcp port 58282其他应用程序永远不会知道您捕获了数据。
https://stackoverflow.com/questions/14903973
复制相似问题