0

我正在运行我正在为其编写插件的 Java 服务器应用程序(如果有人知道的话,Bungeecord)。Bungeecord 服务器在端口 A 上运行,但需要能够连接到端口 A 和 B 上的服务器。因此,如果一个连接到端口 A,一切都应该按预期工作。但是,如果一个连接到 B,则 B 的输入应该发送到端口 A,而通过 B 的连接的输出需要从端口 B 发送。

问题是我的 Bungeecord Java 插件需要知道客户端是通过 A 还是 B 连接的。

我不能简单地创建两个ServerSocket实例(一个用于端口 A,一个用于端口 B),因为这需要修改 Bungeecord(这不是我的项目)。这样做会非常耗时。

是否可以在 linux(debian)和 Java 上解决这个问题,或者我是否需要创建自己的轻量级代理应用程序,为 Java 插件提供信息,无论特定连接是连接到 A 还是 B?

4

1 回答 1

2

从 TCP 层,应用程序仅提供有关它实际接收连接的端口的信息,在您的情况下,这将是端口 A。您可以使用netcat某种“漏斗”之类的工具,因此到端口 A 和端口 B 的连接总是在端口 A 结束,但 TCP 层不会携带任何有关此的信息。

如果您需要在服务器应用程序中分离所有在同一端口接收的多个连接类型,您有以下选项:

  • 在应用层嵌入有关连接类型的信息。
  • 通过源端口,即客户端的端口来区分连接。(那么,您可能会也可能无法使用netcat。不过,您仍然可以使用数据包重写/端口地址转换。)
于 2014-09-11T13:14:34.313 回答