Перенаправить трафик TCP-порта на другой порт, чтобы приложение Java знало, какой порт использовался

Я запускаю приложение на сервере Java (Bungeecord, если кто-нибудь знает), для которого я пишу плагины. Сервер Bungeecord работает через порт A, но необходимо иметь возможность подключиться к серверу через порты A и B. Поэтому, если вы подключаетесь к порту A, все должно работать как положено. Но если кто-то подключается к B, вход B должен быть отправлен на порт A, а выход соединения через B - с порта B.

Проблема в том, что мой плагин Java для Bungeecord должен знать, подключен ли клиент через A или B.

Я не могу просто создать два ServerSocket экземпляры (один для порта A и один для порта B), потому что это потребует модификации Bungeecord (что не является моим проектом). Это будет очень много времени.

Можно ли решить эту проблему в Linux (Debian) и с Java или мне нужно создать свое собственное легкое прокси-приложение, которое предоставляет информацию для плагина Java, подключено ли конкретное соединение к A или B?

1 ответ

На уровне TCP приложению предоставляется только информация о порте, на котором оно фактически получает соединение, и это будет порт A в вашем случае. Вы можете использовать такой инструмент, как netcat как своего рода "воронка", соединения с портом A и портом B всегда заканчиваются на порте A, но уровень TCP не будет нести никакой информации об этом.

Если вам нужно разделить несколько типов соединений, которые все принимаются на один и тот же порт в приложении сервера, у вас есть следующие опции:

  • Вставить информацию о типе соединения на прикладном уровне.
  • Различают соединения по исходному порту, т.е. порту на стороне клиента. (Вы можете или не сможете использовать netcat, затем. Вы все еще можете использовать переписывание пакетов / преобразование адресов портов.)
Другие вопросы по тегам