0

问题 我的
一些朋友玩的游戏最多有 4 个玩家参与。我正在尝试编写一个程序,该程序将允许第五个人监控游戏中发生的事情,而无需实际参与游戏。

背景
游戏的多人部分功能如下:
一名玩家被指定为“主机”。所有其他玩家通过输入主机的 IP 地址连接到主机。主机的机器负责控制游戏的AI。当游戏中发生事件时,游戏的主机副本将事件发送给其他玩家的每个游戏(客户端)。如果客户端玩家执行一个动作,他们的游戏会将动作发送给主机,主机又将它发送给其他玩家,这样任何玩家的动作对所有其他玩家都是可见的。主机和客户端都使用游戏配置文件中预定义的单个 TCP 端口(例如:端口 58282)。该游戏是一款即时战略游戏(非回合制)。

约束
1. 游戏机制不可更改。它是预编译的,无法更改多人游戏机制。2.游戏使用TCP在服务器和客户端之间进行通信

问题
有没有办法让一个单独的程序运行在主机或客户端计算机上监听游戏的端口(当游戏进行时)?我知道 TCP 只允许每个 ip 地址的每个端口一个套接字,因此让游戏和单独的程序同时监听同一个端口是有问题的。假设我在游戏前启动外部应用程序并让应用程序监听游戏的端口,有没有办法让应用程序通过游戏端口听到主机,获取/复制该信息,然后将其转发到游戏?(有点像当地的中间人)

终极问题

考虑到限制,这可能吗?我会以最好的方式去做吗?

4

1 回答 1

1

我先回答第二个问题。你没有走正确的路。正确的方法是在服务器中实现一些功能,以允许单独的“客户端”连接到另一个端口以定期收集统计信息。

有没有办法让应用程序通过游戏端口听到主机,获取/复制该信息,然后将其转发到游戏?

你不需要做中间人。您可以进行简单的数据包捕获,使用无处不在的tcpdumpwireshark。例如,要捕获该 TCP 端口上的所有内容:

tcpdump -n -w capture.pcap tcp port 58282

其他应用程序永远不会知道您捕获了数据。

于 2013-02-15T21:59:11.693 回答