2011-11-16 21 views
6

मैं कुछ मेजबान के नाम है कि मैं तुलना करने के लिए और बताती हैं कि वे एक ही मेजबान का प्रतिनिधित्व करते हैं, उदाहरण के लिए की जरूरत है की तुलना करने के:कैसे सही ढंग से मेजबान के नाम

localhost 
127.0.0.1 
machineName 

सी # में यह करने के लिए सबसे विश्वसनीय तरीका क्या है ?

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' भी नहीं; पी –

+0

यह सही है कि एक होस्टनाम में एकाधिक आईपी पते हो सकते हैं - मामले पर विचार करें 5 नेटवर्क कार्ड वाले पीसी के ... पुष्टि के लिए http://support.microsoft.com/kb/110703 देखें। –

+0

@ आरबी - कम दुर्लभ है कि 5 नेटवर्क कार्ड बस एक ही कनेक्शन में एकाधिक आईपी पते असाइन किए गए हैं। –

उत्तर

2

सामान्य उत्तर नहीं है, अगर आपके पास 2 नेटवर्क कार्ड (उदाहरण के लिए) वाली मशीन है, तो यह जानने का कोई निश्चित तरीका नहीं है कि यह एक ही मशीन से आता है, क्योंकि यह वास्तव में 2 विशिष्ट नेटवर्क तत्व हैं।

हालांकि, आप कुछ विशेष मामलों जैसे स्थानीयहोस्ट बनाम 127.0.0.1 का उल्लेख कर सकते हैं।

जब आप DNS क्वेरी से एकाधिक आईपी प्राप्त करते हैं तो आमतौर पर इसका मतलब यह है कि मशीनें समान नहीं हैं क्योंकि इस तकनीक का उपयोग आमतौर पर विभिन्न मशीनों के बीच लोड संतुलन के लिए किया जाता है।

अतीत में यह पता लगाने के लिए कई हैकिंग तकनीकें थीं कि 2 आईपीएस एक ही मशीन हैं या नहीं, कुछ मामलों में आप मशीन का आंतरिक समय प्राप्त कर सकते हैं या यदि लगातार क्रम में बंदरगाहों को खोला जाता है तो आप इसका भी उपयोग कर सकते हैं। लेकिन मैं दृढ़ता से सलाह देता हूं कि इस तरह से नहीं जा रहा है। इस चेक के बिना संभवतः आपके लक्ष्य को प्राप्त करने के लिए बेहतर है (उदाहरण के लिए यदि आपके पास कोई वेब एप्लिकेशन है तो आप आसानी से कुकीज़ का उपयोग कर सकते हैं)। फिर, मदद करने के लिए और अधिक संदर्भ की आवश्यकता है।

+0

हाय @idanzalz, यह एक वेब अनुप्रयोग नहीं है, यह एक डेस्कटॉप एप्लिकेशन है जहां उपयोगकर्ता विभिन्न सर्वरों के लिए कुछ होस्ट (आईपी या मशीननाम) दर्ज कर सकता है और मुझे उनका विश्लेषण करने और कहने की ज़रूरत है कि वे एक ही मशीन पर हैं या नहीं – username

+0

"विश्लेषण" से आपका क्या मतलब है। क्या उनके पास कुछ स्थापित है जो आप बात कर सकते हैं? क्या आप ऑपरेटिंग सिस्टम जानते हैं? यदि यह एक विंडोज़ मशीन है तो आप शायद नेटबीओस के माध्यम से मशीन का नाम प्राप्त कर सकते हैं। क्या आप मशीन की कॉन्फ़िगरेशन पर कुछ भी नियंत्रित/मान सकते हैं? – idanzalz

+0

एकमात्र धारणा जो मैं कर सकता हूं वह यह है कि इन मशीनों पर विंडोज़ स्थापित हैं। इस पर निर्भर करता है कि दो मेजबान एक ही मशीन का प्रतिनिधित्व करते हैं, मुझे यह सुनिश्चित करने की ज़रूरत है कि मैं उनके लिए एक ही कॉन्फ़िगरेशन प्रदान करता हूं। लेकिन मैं जांच नहीं करता कि मशीनों पर कौन सा सॉफ्टवेयर स्थापित है। – username

संबंधित मुद्दे