我正在运行一个Java服务器应用程序(如果有人知道的话,这是个笨拙的记录),我正在为它编写插件。Bungeecord服务器在端口A上运行,但需要能够连接到端口A和端口B上的服务器。因此,如果连接到端口A,一切都应按预期工作。但是如果一个连接到B,B的输入应该发送到端口A,而B上的连接的输出需要从端口B发送。
问题是,我的Bungeecord Java插件需要知道客户端是通过A还是B连接。
我不能简单地创建两个ServerSocket
实例(一个用于端口A,一个用于端口B),因为这需要修改bungecord(这不是我的项目)。这样做会耗费大量时间。
有没有可能在linux(debian)和Java上解决这个问题,或者我需要创建自己的轻量级代理应用程序,为Java插件提供信息,无论a还是B连接了一个特定的连接?
最佳答案
从TCP层,应用程序只提供有关它实际接收连接的端口的信息,在您的情况下,这将是端口A。您可以使用类似于netcat
的工具作为某种“漏斗”,这样到端口a和端口B的连接总是在端口a结束,但是TCP层不会携带任何有关该端口的信息。
如果需要分离服务器应用程序中在同一端口接收的多个连接类型,可以使用以下选项:
在应用程序层嵌入有关连接类型的信息。
按源端口(即客户端的端口)区分连接。(那么,您可能无法使用netcat
。不过,您仍然可以使用包重写/端口地址转换。)
关于java - 将TCP端口流量重定向到其他端口,以便Java应用程序知道使用了哪个端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25489113/