2010-10-28 62 views
1

我有在Tomcat上運行的Web應用程序(並獲取HTTP請求)以及一些僅獲取TCP的其他後端獨立應用程序。由於某些原因,我只能在外部使用端口8080.因此,我需要從外部獲取所有TCP請求到端口8080,並將HTTP請求轉發到Tomcat上的Web應用程序以及所有TCP純請求(非HTTP) - 獨立應用程序。可以對任何端口進行內部轉發,例如, Tomcat上的8181和獨立應用程序上的8282。可以設置這樣的配置嗎?它是如何完成的?拆分HTTP和僅限TCP(非HTTP)的流量

在此先感謝。

回答

2

TCP和HTTP是不同網絡堆棧層中的協議。如果您想使用某個應用程序來過濾HTTP請求,則應用程序應該處理應用程序層信息,而不是網絡層(如TCP/UDP)。

0

我不明白這通常是可能的。你可以逐個查看數據包,但http正文的中間部分可以是任意的,所以你不能只看每個數據包的數據。

如果任何特定的客戶端會向你發送http或一般TCP但不兩者,你可以通過源IP地址來做到這一點嗎?你知道將向你發送http請求的服務器的地址,還是會向你發送TCP請求的服務器的地址?

如果您不知道源IP,則可以試探性地查看來自某些先前未知IP的第一個數據包,並查看它是否看起來像http,然後將該地址標記爲包含http流量。

什麼是TCP通信的內容/格式?有什麼模式可以檢測到嗎? Y

0

也許你可以使用iptables + L7過濾器來做這樣的事情。當然,這隻有在你的機器上運行Linux時纔有效。另外我不知道最近l7過濾器項目已經更新。

0

Java servlet技術不限於Http。 servlet interface可讓您通過ServletRequest.getInputStream()讀入輸入流。因此,您可以創建Servlet接口的實現並將其映射到web.xml中,並且您都設置爲接收任何TCP通信。

一旦讀取了輸入流以嗅探內容,您將希望將HTTP請求轉發給HttpServlet。要做到這一點,您需要確保您傳遞的輸入流位於輸入的一開始。

編輯:在再次閱讀您的問題時,我注意到您不打算按照我原先的想法直接在外部端口上公開Tomcat。如果你願意讓tomcat監聽外部端口,你可以嘗試上面描述的方法