我有在Tomcat上运行的Web应用程序(并获取HTTP请求)和一些只获得TCP的后端独立应用程序。出于某些原因,我只能使用外部端口8080.因此,我需要将所有TCP请求(从外部)发送到端口8080并将HTTP转发到Tomcat上的Web应用程序以及所有TCP纯请求(不是HTTP) - 到独立应用程序。可以对任何端口进行内部转发,例如Tomcat上的8181和独立应用程序上的8282。是否可以设置此类配置?如何做到这一点?
提前致谢。
答案 0 :(得分:2)
TCP和HTTP是不同网络堆栈层中的协议。如果要使用某些应用程序来过滤HTTP请求,则应用程序应处理应用程序层信息,而不是网络层(如TCP / UDP)。
答案 1 :(得分:0)
我不知道一般情况下这是怎么回事。您可以逐个数据包查看,但http主体的中间可以是任意的,因此您不能只查看每个数据包的数据
如果任何特定客户端将向您发送http或通用TCP,但不是两者都发送,您可以通过源IP地址执行此操作吗?您是否知道将向您发送http请求的服务器的地址或将向您发送TCP请求的服务器的地址?
如果您不知道源IP,您可以尝试从一些以前未知的IP中查看第一个数据包,看看它是否看起来像http,然后将该地址标记为包含http流量。
TCP通信的内容/格式是什么?你可以检测到任何模式吗? ÿ
答案 2 :(得分:0)
也许你可以使用iptables + L7过滤器做这样的事情。当然,这只有在你的盒子上运行Linux时才有效。另外我不知道最近l7过滤器项目是如何更新的。
答案 3 :(得分:0)
Java servlet技术不仅限于Http。 servlet interface允许您通过ServletRequest.getInputStream()读入传入的输入流。因此,您可以创建Servlet接口的实现并将其映射到web.xml中,并且您已设置为接收任何TCP流量。
一旦您读取了输入流以嗅探您希望将HTTP请求转发到HttpServlet的内容。为此,您需要确保传递的输入流位于输入的最开头。
编辑:再次阅读您的问题时,我注意到您并不打算像我原先想的那样直接在外部端口上公开Tomcat。如果您愿意让tomcat监听外部端口,您可以尝试上述方法