2012-10-10 22 views
6

मैं इस जवाब पर एक कोड स्निपेट में आए करने के लिए आवंटित सभी IP प्राप्त करें: Get IP address in a console applicationएक सर्वर

using System; 
using System.Net; 


namespace ConsoleTest 
{ 
    class Program 
    { 
     static void Main() 
     { 
      String strHostName = string.Empty; 
      // Getting Ip address of local machine... 
      // First get the host name of local machine. 
      strHostName = Dns.GetHostName(); 
      Console.WriteLine("Local Machine's Host Name: " + strHostName); 
      // Then using host name, get the IP address list.. 
      IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 
      IPAddress[] addr = ipEntry.AddressList; 

      for (int i = 0; i < addr.Length; i++) 
      { 
       Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString()); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

इस कोड को ठीक काम करता है जब मैं इस पर चलाने के लिए स्थानीय रूप से अपने कंप्यूटर के आईपी पते पाने के लिए। मैं जो करने की कोशिश कर रहा हूं वह है कि मेरे नेटवर्क पर किसी सर्वर पर आईपी पते प्राप्त करने के लिए कोड का उपयोग करें। तो मूल रूप से मैंने strHostName = Dns.GetHostName() को प्रतिस्थापित करने का प्रयास किया; strHostName = "myServerName" के साथ; लेकिन यह केवल एक आईपी देता है। जब मैं सर्वर पर प्रोग्राम चलाता हूं तो मुझे उस सर्वर को आवंटित सभी आईपी मिलते हैं। लक्ष्य मेरे कंप्यूटर पर प्रोग्राम चलाने के लिए है, 100 से अधिक सर्वरों पर आईपी पते प्राप्त करने के लिए डेटाबेस तालिका से सर्वर नाम पढ़ें। मैं प्रत्येक सर्वर पर लॉग ऑन करने और आईपी पते प्राप्त करने के लिए सर्वरों में से प्रत्येक पर प्रोग्राम चलाने से बचने की कोशिश कर रहा हूं।

"www.google.com" के लिए कोड ठीक काम करता है - क्या यह सर्वर संबंधित है या सुरक्षा समस्या है?

डेटाबेस से डेटा प्राप्त करना शुरू करने से पहले मुझे कोड को एक सर्वर के लिए काम करने की आवश्यकता है :) उम्मीद है कि यह बेहतर समझाएगा। धन्यवाद!

+0

मैं आपके प्रश्न को समझने में असमर्थ था। कृपया इसे संपादित करने के लिए इसे संपादित करने पर विचार करें। क्या आप किसी सर्वर में रिमोट कर सकते हैं और अपना प्रोग्राम वहां चला सकते हैं? शायद [यह] (http://serverfault.com/questions/15887/how-to-list-all-the-ip-addresses-of-a-server) मदद कर सकता है? – kush

+1

आपकी प्रतिक्रिया के लिए धन्यवाद। मैंने मूल प्रश्न संपादित किया। धन्यवाद – nelsonGti

उत्तर

0

यह हो सकता है कि अन्य आईपी को सर्वर द्वारा उद्देश्य से DNS से ​​बाहर रखा जा रहा हो। इस कार्यक्षमता का एक अच्छा उदाहरण in this KB Article (975808) पाया जा सकता है।

GetHostAddress() आज़माएं और सत्यापित करें कि आपको एक ही परिणाम मिल गया है। एमएसडीएन देखें: gethostaddress()

विफल होने पर, आप आईपी पते के लिए पूछताछ के लिए अन्य तरीकों को देखना चाह सकते हैं।

3

क्या आप उन विधियों का उपयोग करके हल करने के लिए जो नाम बता रहे हैं, उसके बारे में डीएनएस क्या कहता है, इसके बीच अंतर को भ्रमित कर रहे हैं, यह पता लगाने के लिए कि आईपी पते वास्तव में आपके द्वारा रुचि रखने वाली विशिष्ट मशीन पर चल रहे टीसीपी/आईपी प्रोटोकॉल स्टैक से क्या हैं? यदि आप जानना चाहते हैं कि कौन से आईपी पते हैं कि मशीन वास्तव में कॉन्फ़िगर की गई है, भले ही DNS में पंजीकृत हो या न हो, आप मशीन पर कॉन्फ़िगर किए गए पते की गणना के लिए WMI का उपयोग करना चाहते हैं। लेख

देखें: WMI Query to get IP Address, Domain Name, OS Version

ऊपर अपने कोड में, आप बस स्थानीय मशीन कोड अपने कॉन्फ़िगर किया गया DNS रिसोल्वर का उपयोग करें और आपको बताएंगे कि प्रविष्टियों नाम आप कर रहे हैं के लिए DNS रिकॉर्ड के रूप में अस्तित्व पर चल रहा है, कह रहे हैं क्वेरी का उपयोग कर। यही कारण है कि जब आप www.google.com जैसे किसी चीज़ के लिए कोई क्वेरी आज़माते हैं तो आप एक मान प्राप्त कर सकते हैं। ऐसा इसलिए है क्योंकि आप बस DNS में एक नाम देख रहे हैं और चूंकि यह सार्वजनिक रूप से पहचानने योग्य नाम है, इसलिए कोई भी सही सेटअप DNS सर्वर वैध मान की रिपोर्ट करने में सक्षम होगा।

यह आईपी पते सर्वर से बाध्य होने से बहुत अलग है। उदाहरण के लिए, फ़ायरवॉल के पीछे बैठे सर्वर के बारे में सोचें। सर्वर वास्तव में आईपी पते का उपयोग कर सकता है जो आंतरिक नेटवर्क के लिए स्थानीय हैं जो फ़ायरवॉल पर सार्वजनिक रूप से सुलभ आईपी पते पर मैप किए जाते हैं। उस स्थिति में, आईपी पते जो सर्वर जानता है, वह सार्वजनिक आईपी पते से पूरी तरह अलग है जो इसकी संबंधित DNS प्रविष्टियों में दिखाई देगा।

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