разделить трафик только по HTTP и TCP (не HTTP) - PullRequest
1 голос
/ 28 октября 2010

У меня есть веб-приложение, которое работает на Tomcat (и получает HTTP-запросы) и какое-то другое автономное приложение, которое получает только TCP. По некоторым причинам я могу использовать только внешний порт 8080. Поэтому мне нужно получить все TCP-запросы (извне) на порт 8080 и перенаправить HTTP-запросы в веб-приложение на Tomcat, а все чистые TCP-запросы (не HTTP) автономное приложение. Внутренняя переадресация может быть выполнена на любой порт, например 8181 на Tomcat и 8282 на отдельном приложении. Можно ли настроить такую ​​конфигурацию? Как это можно сделать?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 28 октября 2010

TCP и HTTP - протоколы на разных уровнях сетевого стека. Если вы хотите использовать какое-либо приложение для фильтрации HTTP-запросов, ваше приложение должно работать с информацией уровня приложения, а не с уровнем сети (например, TCP / UDP).

0 голосов
/ 28 октября 2010

Технология Java-сервлетов не ограничивается Http. интерфейс сервлета *1001* позволяет читать входящий поток ввода с помощью ServletRequest.getInputStream () . Таким образом, вы можете создать реализацию интерфейса Servlet и отобразить ее в web.xml, и у вас все настроено для получения любого трафика TCP.

Как только вы прочитаете входной поток, чтобы прослушать содержимое, вы захотите перенаправить HTTP-запросы в HttpServlet. Для этого вам нужно убедиться, что входной поток, который вы передаете, расположен в самом начале ввода.

EDIT : Читая ваш вопрос еще раз, я заметил, что вы не планируете выставлять Tomcat напрямую на внешний порт, как я изначально думал. Если вы хотите, чтобы tomcat прослушивал внешний порт, вы можете попробовать подход, описанный выше

0 голосов
/ 28 октября 2010

Возможно, вы могли бы сделать что-то подобное, используя фильтр iptables + L7.Конечно, это будет работать, только если вы используете Linux на своем компьютере.Также я не знаю, как недавно был обновлен проект фильтра l7.

0 голосов
/ 28 октября 2010

Я не понимаю, как это вообще возможно.Вы можете посмотреть пакет за пакетом, но середина тела http может быть произвольной, поэтому вы не можете просто посмотреть данные каждого пакета

Если какой-то конкретный клиент отправит вам либо http, либо общий TCPно не оба, вы можете сделать это по IP-адресу источника?Знаете ли вы адреса серверов, которые будут отправлять вам http-запросы, или серверов, которые будут отправлять вам TCP-запросы?

Если вы не знаете исходные IP-адреса, вы можете эвристически просмотреть первый пакет изкакой-то ранее неизвестный IP-адрес и посмотрите, выглядит ли он как http, затем пометьте этот адрес как содержащий трафик http.

Что такое контент / формат для связи TCP?Есть ли какой-то паттерн, который вы можете обнаружить в этом?Y

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...