2010-01-29 158 views
2

什麼是檢查客戶端有一個開放端口的最佳方式,並且如果它進正常檢查客戶端端口是開放的,並轉發[C#,ASP.NET]

這個應用程序是這樣的目前:

  1. 客戶端創建傳入連接插座,並希望大家通知關於他的開放端口。客戶端也嘗試使用UPnP設置端口轉發(但它並不總是存在並啓用)。
  2. 然後客戶端將其端口發送到「中央」已知服務器。
  3. 服務器應檢查端口是否打開(正確轉發)並返回其狀態。
  4. 如果有轉發問題,客戶端會通知用戶。

目標是讓服務器上保存的IP +端口信息能夠提供給其他客戶端。我可以嘗試從服務器到客戶端打開一個Socket,看看它是否失敗,但有沒有更容易(更快)的方式來做到這一點?

例如,該網站確實類似的東西:http://www.canyouseeme.org/

+0

「ping」這個詞在這裏可能有點令人困惑。您無法ping特定的端口,因爲ping涉及ICMP數據包而不是TCP。他們沒有任何端口號的概念。 – Thorarin 2010-01-29 13:48:07

+0

正確,不是單詞的最佳選擇。 – Groo 2010-01-29 14:42:27

回答

1

沒有,沒有。
要檢查是否可以建立連接,您需要嘗試建立連接:)使用Socket是一種明智的方式。

您可以通過檢查機器是否具有公共IP地址或本地IP地址來跳過某些客戶端的此步驟。儘管如此,公司防火牆和類似的東西仍然存在,所以試圖開通連接是最安全的方式。

使用ICMP回顯請求(ping)不是一個選項,因爲ICMP是與TCP(或UDP)不同的協議,它不具有端口號的概念。 Pinging可用於確定IP地址是否可到達,但這對您的情況沒有附加價值。

+0

那麼,這是如何工作:http://www.canyouseeme.org/? – Groo 2010-01-29 13:41:57

+0

@格羅:試圖按照你所描述的方式打開一個套接字? – Thorarin 2010-01-29 13:45:30

+0

噢,好的,儘管你說過這根本不可能。 ;)好吧,這實際上並不是問題,我認爲像ping這樣的東西可能是可能的(儘量少用資源)。 – Groo 2010-01-29 13:48:37