当前位置: 首页 > 知识库问答 >
问题:

将TCP端口流量重定向到其他端口,以便Java应用程序知道使用了哪个端口

松琦
2023-03-14

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

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

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

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

共有1个答案

令狐俊风
2023-03-14

从TCP层,一个应用程序只被提供关于它实际接收连接的端口的信息,在你的例子中是端口A。您可以使用像< code>netcat这样的工具作为某种“漏斗”,这样到端口A和端口B的连接总是在端口A结束,但是TCP层不会携带任何关于它的信息。

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

    < li >在应用层嵌入有关连接类型的信息。 < li >通过源端口,即客户端的端口来区分连接。(那么,您可能会也可能不会使用< code>netcat。不过,您仍然可以使用包重写/端口地址转换。)
 类似资料:
  • 我有一个网站<code>www.example。com使用RewriteEngine将HTTP流量重定向到HTTPS: 我发现的问题是谷歌已经索引了这个URL: 给出此错误: 我尝试重定向流量,添加来自80和443虚拟主机的永久重定向: 没有成功。什么是正确的方法来重定向从http://www.example.com:443(和衍生网页)到https://www.example.com的所有流量?

  • 问题内容: 我有一个托管在lighttpd上的网站,可以在“ www”子域中访问。我还有一个聊天服务器,侦听由node.js和socket.io制成的8124端口。 我希望所有客户端流量都通过将所有请求重定向到“聊天”子域到端口8124来在端口80上发生。因此我启用了mod_proxy,并在lighttpd.conf中添加了: 在客户端上,当我连接到网络套接字时, 我从node.js得到正确的消息

  • 问题是:在java中,您可以使用ServerSocket(0)在服务器上创建一个套接字,它会选择一个随机端口进行监听。但是,当您在客户机上创建套接字以使用套接字(addr,port)发送消息时,显然无法确定您需要发送到服务器上的哪个端口。除了基本的“如果你输入0,它将选择一个随机端口”之外,我在网络搜索中找不到关于这个选项的任何信息。是否有人知道或拥有可以从客户端解释这个场景应该是什么样子的资源?

  • 问题内容: 我可以知道Java RMI连接使用哪个端口吗? 如果要使用RMI连接将Java客户端应用程序连接到Java服务器应用程序,我需要在服务器计算机上打开哪个端口,以便客户端应用程序可以连接到该端口? 我想在服务器计算机上设置防火墙,但是我不知道应该打开哪个端口。 问题答案: RMI通常无法在防火墙上工作,因为它使用不可预测的端口(它始于1099,然后再使用随机端口运行)。 在这些情况下,通

  • 在阅读TCP的工作原理时,我读了很多书,其中提到在客户端连接到服务器后,套接字程序员应该调用accept(),以接受来自客户端的连接。然后,父TCP服务器进程(在端口上侦听,比如说80)调用一个fork(),并将创建一个子进程,该子进程将继续与客户端通信。子进程显然必须绑定到另一个临时端口才能与客户端通信。我的问题是,一旦子进程分叉,客户端如何知道将数据发送到哪个端口以便进行通信?侦听端口80的父

  • 我有一个Tomcat 9.0.60服务器,运行在Linux上的OpenJDK 1.8.0上,其中netstat-ltpn | grep java显示它侦听的端口不止配置的端口: (我从该列表中删除了所有配置的端口。) 因此,我认为有几个应用程序也打开了“他们自己的”套接字,他们听。我想找出每个端口的哪个Java线程正在侦听,这样我就可以进一步找出应用程序,也许它仍然是必需的,或者只是开发人员忘记的