2010-05-25 41 views
3

我剛剛遇到一個問題,我必須檢查路徑是否指向Windows共享。此問題的一部分是檢查主機A是否與主機B相同。主機A和主機B可以是以下任何一種{IPv4地址,IPv6地址,主機名,FQDN}。由於我不需要確切地解決和比較我的情況下的IP地址就足夠了。如何檢查兩臺主機是否相同

但理論上來說,有一種方法可以檢查主機是否相同?

+0

即使你知道兩個主機是相同的 - 是不是沒有意義?這兩個主機可能會在不同的時刻出現,包括DNS更新,負載平衡等等。 – Dolph 2010-05-25 16:09:50

+0

那麼好點,但有沒有負載平衡的應用程序和DNS更新是罕見的。無論如何,這個問題在理論上是理性的,沒有聲稱是合理的。 – 2010-05-25 16:24:25

+0

我很感興趣,無論看到的答案:) – Dolph 2010-05-25 16:28:53

回答

2

不,沒有通用方法來查看兩個標識符(名稱或地址)是否轉到同一主機。一個例子:192.0.2.12001:db8::bad:dcaf。他們是一樣的嗎? (回答:看不出)

在互聯網中沒有主機身份的一般概念。一些協議有這樣的概念,例如SSH(連接到主機,看指紋是否匹配)或HIP(測試密鑰),但是您依賴於爲這些特定機器激活的協議。

一些啓發式方法可能會有所幫助(例如,該機器爲fingerprinting),但它遠不是100%。

0

將這兩個地址傳遞給getaddrinfo()函數,並將結果列表進行比較。

gethostbyname()不同,此函數將高興地解析IPv6文字,並且還會返回與主機名關聯的任何相關的AAAAA記錄。

+1

我用這種方法你會得到錯誤的否定。考慮機器A有兩個IP地址,比如說192.168.1.1和192.168.2.1。地址不匹配,但主機相同。 BTW:與MAC地址相同的問題。 – 2010-05-25 20:07:11

+1

是的,當然你會的。沒有辦法打敗這種邏輯。它可以告訴你,兩個主機是相同的 - 它不能證明他們不是_。 – Alnitak 2010-05-25 20:09:50