2011-11-16 69 views
6

我有我需要比較,並告訴他們是否代表相同的主機,例如一些主機名:如何正確地比較主機名

localhost 
127.0.0.1 
machineName 

什麼是做它在C#中最可靠的方法?現在我在做,像:

private bool CompareHosts(string host1, string host2) 
    { 
      UriBuilder builder1 = new UriBuilder(); 
      builder1.Host = Dns.GetHostAddresses(host1)[0].ToString(); 
      var uri1 = builder1.Uri; 

      UriBuilder builder2 = new UriBuilder(); 
      builder2.Host = Dns.GetHostAddresses(host2)[0].ToString(); 
      var uri2 = builder2.Uri; 

      return Uri.Compare(uri1, uri2, UriComponents.Host, 
        UriFormat.Unescaped, StringComparison.OrdinalIgnoreCase) == 0; 
    } 

我不包括錯誤處理的主機地址數組,但我不知道做什麼,如果它會返回一個以上的地址,豈不是他們會代表不同的機器?有沒有更好的方法來比較它們?我需要檢查這些主機是否指向同一臺機器。

+2

也請不要忘記':: 1'和'0:0:0:0:0:0:0:1'; p –

+0

單個主機名可以有多個IP地址是正確的 - 考慮大小寫5網卡的PC的... 見http://support.microsoft.com/kb/110703確認。 –

+0

@RB - 少見的5個網卡只是多個IP地址已分配給單個連接。 –

回答

2

一般的答案是否定的,如果你有一臺機器2個網卡(例如),有知道它來自同一臺機器沒有肯定的方式,因爲它確實是2個不同的網絡元素。

但是,你可以處理一些特殊情況下,像你提到的本地主機與127.0.0.1。

當你從DNS查詢多個IP地址通常意味着機器是不一樣的,因爲這種技術通常用於不同的機器之間的負載平衡。

過去有很多黑客技術可以發現2ip是否是同一臺機器,在某些情況下,您可以獲得機器的內部時間,或者如果它以連續的順序打開端口,您也可以使用它。但我強烈建議不要這樣。如果不進行此項檢查,可能會更好地實現您的目標(例如,如果您有Web應用程序,則可以輕鬆使用此cookie)。再次,需要更多的上下文來幫助。

+0

嗨@idanzalz,它不是一個Web應用程序,它的桌面應用程序,用戶可以輸入不同的服務器一對夫婦的主機(IP或者機器名),我需要分析他們說,如果他們是在同一臺機器上或不 – username

+0

「分析」是什麼意思?他們是否有安裝的東西可以與之交談?你知道操作系統嗎?如果它是一臺Windows機器,您可能可以通過netbios獲取機器名稱。你能控制/假定機器配置上的任何東西嗎? – idanzalz

+0

我可以做的唯一假設是這些機器上安裝了窗口。根據兩臺主機是否代表同一臺計算機,我需要確保爲它們提供相同的配置。但我不檢查機器上安裝了哪些軟件。 – username