Tcp 两个程序监听一个套接字

Tcp 两个程序监听一个套接字,tcp,port,sharing,multiplayer,Tcp,Port,Sharing,Multiplayer,问题 我的一些朋友玩一个最多4人参与的游戏。我正在尝试编写一个程序,允许第五个人在没有实际参与游戏的情况下监控游戏中发生的事情 背景 游戏的多人部分的功能如下: 一名球员被指定为“东道主”。所有其他玩家通过输入主机的ip地址连接到主机。主机的机器负责控制游戏的AI。当游戏中发生事件时,游戏的主机副本会将事件发送给其他玩家的每个游戏(客户端)。如果客户端玩家执行某个动作,他们的游戏会将该动作发送给主机,主机会将该动作发送给其他玩家,以便其他所有玩家都能看到任何玩家的动作。主机和客户端都使用游戏

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

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

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

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

终极问题


考虑到约束条件,这是否可行?我是以最好的方式进行的吗?

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

应用程序是否可以通过游戏端口听到主机的声音, 获取/复制该信息,然后将其转发给游戏

你不需要做mitm。您可以使用像
tcpdump
wireshark
这样无处不在的工具来进行简单的数据包捕获。例如,要捕获该TCP端口上的所有内容:

tcpdump -n -w capture.pcap tcp port 58282

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

您能否更改游戏配置文件,使其侦听其他端口?然后您在它的官方端口(客户端连接的地方)上侦听,并将所有内容转发到另一个端口(即,您在每个连接的两个方向上转发所有数据)。我相信更改客户端配置文件中的端口将导致客户端尝试使用同一端口与主机通信(主机也没有监听!)例如,将客户端游戏更改为端口3333,以便应用程序可以监听58282(并转发到3333)将导致游戏尝试与端口3333上的主机通信,即使主机使用的是58282。不幸的是,我无法改变游戏的多人机制。这将是理想的,但考虑到限制,我正在研究捕获数据包。如果我可以从端口58282上的主机游戏捕获数据包,我可以识别哪个pacKET很有用,剩余的会在运行中丢弃。数据包中的数据可以发送给监控游戏的“第五个人”。让我看看这会给我带来什么。