2011-08-12 93 views
1

我想讓雲計算機向公司NAT /防火牆後面的機器發送消息。消息從雲到NAT /防火牆後面的機器

我的想法是在企業計算機上安裝一個向雲計算機發送長HTTP請求的客戶端,當雲有消息時它會返回響應。

我以爲我發明了這個輪子,直到我讀到「http隧道」(這是我在做什麼?)。 我還讀過一些防火牆即使在http上也會阻止非html通信。 那麼我的機會是什麼?

我也讀過,Skype使用更復雜的機制。 是因爲我的想法不起作用,或者因爲他們的想法更快?

我現在可以在速度上妥協 - 哪種方法可行並且易於實施?

回答

3

我知道你想和TCP/HTTP, 但要做到這一點我會做的方式是使用UDP來 NAT「打孔」,從而建立一個UDP通道, 然後用UDP數據包送過來的是 通道作爲信令機制...

這些可能(也可能不會)是有用的或相關的:

http://en.wikipedia.org/wiki/STUN 
http://en.wikipedia.org/wiki/Hole_punching 
http://en.wikipedia.org/wiki/UDP_hole_punching 
http://en.wikipedia.org/wiki/TCP_hole_punching 

而且 - 如果你真的必須使用HTTP,你可以簡單地 每X秒發出一個新的HTTP請求...

HTTP輪詢,如果你願意...

+0

什麼是優勢 - 性能?更少的機會被發現? –

+0

我也該怎麼做 - 我需要一些庫還是應該自己實現? –

+0

如果你使用UDP方式 - 你基本上需要能夠發送和接收兩端的UDP數據包。我無法爲此建議任何圖書館 - 儘管我知道存在很多圖書館。 (我主要是一名Delphi程序員 - 所以我可能會使用Indy圖書館或使用Winsock'roll-my-own' - 順便引導我讀書推薦 - 有一本Winsock書籍, C/C++(正如我記得的),Quinn和Shute ...這是你想要的書,如果這是Unix的話,那麼W. Richard Stevens的「Unix Network Programming」不會出錯...... –

2

如果他們阻止端口80上的非HTML,你可以嘗試端口443.除非有一個SSL「中間人」代理(不太可能),否則你會沒事的。

IIRC Skype使用端口跳轉,所以基本上你需要一個算法來找到一個你可以連接的未過濾(通過智能猜測的強力)端口。