2013-04-27 77 views
0

考慮以下情況:重新路由應用網絡業務在數據鏈路層

你有你tesing的應用程序,但爲了測試所說的程序,你需要運行它的多個實例的網絡功能並讓他們相互溝通。

可能的解決方案如下: - 在通過WAN或LAN連接的單獨機器上運行軟件。 - 在虛擬機上運行軟件,全部在同一臺計算機上。

我不想使用這些方法(推理無關緊要)。我想知道如果有,我可以(在任何寫頻語言理想)的方式,這樣我可以在一個運行相同的軟件的多個實例改道從測試應用的網絡傳輸方式計算機,並讓它們表現得好像它們是在該計算機上運行的唯一實例。

換句話說,我希望能夠對應用程序進行編碼,以便每個實例在同一個「偵聽」端口上偵聽(因爲在生產中每臺計算機上只會運行一個實例)。然後,我想知道我是否可以在較低級別重新路由網絡請求,然後應用程序,以便它們不會干涉彼此(衝突在同一端口號)。基本上,我想要構建一個虛擬環境,其中只有重定向網絡調用(而虛擬機需要更多的資源,並有更多的參與)。這是否可能,我該如何解決這個問題?

謝謝!

UPDATE:這是什麼,我想完成一個更準確的想法:

基本上,我想設置另一個應用程序透明地重定向綁定請求到可用的端口,並管理這些應用程序綁定在哪裏。因此,從應用程序的角度來看,所有實例都綁定到端口1000,但實際上,這個其他應用程序會自動管理綁定哪個實例,並避免潛在的衝突。我覺得這可以用Windows Hooks完成,但是我不確定你可以如何實現這一點?

回答

0

據我所知,在同一個網絡設備上覆用同一個端口沒有任何理智的方法。在最低限度,你就需要在以下的選擇:

  • 運行在不同的端口程序的每個實例
  • 創建多個虛擬網絡接口

第一個選擇是容易可能是我會選擇的那個。第二個更接近你正在尋找的東西,但它將是一個真正的PITA設置 - 你可以看看VirtualBox和它的主機專用網絡的靈感。如果你正在linux上編寫東西,你可能會看到管道和chroot,但你將花更多的時間來設置這個環境,而不是編寫你的軟件。

+0

感謝您的回覆;我不擔心花時間來設置這個...實際上,我正在考慮將它分成一個獨立的項目(這兩個項目都只是我自己的時間),併爲每當發生這種情況創建一個直觀的「解決方案」。 我實際上並不在乎測試應用程序使用不同的端口,但我希望能夠保持原樣(因此如果應用程序設計爲使用特定的偵聽端口,則不需要更改此設置)。 我想象一個解決方案,你將在應用程序和套接字之間有一箇中間層。例如... – araisbec 2013-04-27 22:37:02

+0

基本上,我想編寫另一個應用程序,將TRANSPARENTLY重定向綁定請求重定向到可用的端口,並管理哪些應用程序綁定在哪裏...因此從應用程序的角度來看,所有實例都綁定到端口1000 ,但實際上,這個其他應用程序會自動管理哪個實例綁定在哪裏,並避免潛在的衝突。我覺得這可以用Windows Hooks完成,但是我不確定你可以如何實現這一點?我也將這個添加到問題本身。 – araisbec 2013-04-27 22:47:04

+0

下面是問題:1)綁定到不同的端口將需要重寫DLL調用(掛鉤可以工作),這可能不是太粗糙。 2)將連接路由到正確的目標很可能需要更改網絡驅動程序,即使它是虛擬的,這是一個非常雄心勃勃的努力 – 2013-04-27 22:51:48