2009-06-29 6 views
44

से आईपीवी 4 पते प्राप्त करें मुझे यहां कुछ कोड मिला है जो आईपीवी 4 मशीनों पर बहुत अच्छा काम करता है, लेकिन हमारे बिल्ड सर्वर (एक आईपीवी 6) पर यह विफल हो जाता है। संक्षेप में:Dns.GetHostEntry()

IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty); 

GetHostEntry के लिए दस्तावेज़ का कहना है कि string.Empty में गुजर आप स्थानीय होस्ट की IPv4 पता मिल जाएगा। यह वही चीज है जो मैं चाहता हूं। समस्या यह है कि यह हमारी आईपीवी 6 मशीन पर ":: 1:" स्ट्रिंग को वापस कर रहा है, जो मुझे विश्वास है कि आईपीवी 6 पता है।

किसी अन्य आईपीवी 4 मशीन से मशीन को पिंग करना अच्छा IPv4 पता देता है ... और नियमित रूप से कर रही एक "पिंग -4 machinename" से ही सही IPv4 पता देता है .... लेकिन पिंग वह खुद को देता है से " :: 1: "।

मैं इस मशीन के लिए आईपीवी 4 कैसे प्राप्त कर सकता हूं?

उत्तर

60

क्या आपने all the addresses पर वापसी की है, family InterNetworkV6 के लोगों को छोड़ दें और केवल आईपीवी 4 बनाए रखें?

+1

Ahhhh निश्चित रूप से ... । एक लाइटबुल पल। धन्यवाद! – zombat

+1

+1: धन्यवाद - मैं यह वही प्रश्न पूछने वाला था :) –

+0

मेरा कॉल केवल आईपीवी 6 लौटा रहा है, कोई आईपीवी 4 प्रविष्टियां नहीं। यदि मैं PowerShell में 'Resolve-DnsName -Type A' करता हूं तो मुझे आईपीवी 4 वापस मिलता है (डिफ़ॉल्ट रूप से यह इस मामले में लौटाता है) एएएए)। – kamranicus

6
public Form1() 
    { 
     InitializeComponent(); 

     string myHost = System.Net.Dns.GetHostName(); 
     string myIP = null; 

     for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++) 
     { 
      if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false) 
      { 
       myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString(); 
      } 
     } 
    } 

प्रचार MYIP और myhost सार्वजनिक चर में और फार्म के किसी भी समारोह में उपयोग करें।

39

सभी स्थानीय IPv4 पतों ढूंढने के लिए:

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList, 
    a => a.AddressFamily == AddressFamily.InterNetwork); 

या Array.Find या Array.FindLast उपयोग करें यदि आप सिर्फ एक चाहते हैं।

+6

+1 linq – Nahum

+1

@NahumLitvin का उपयोग करने के लिए +1 लेकिन यह linq नहीं है? – Lukazoid

+0

@ लुकाज़ॉय इटा नहीं। मेरा मतलब हो सकता है कि लैम्ब्डा अभिव्यक्ति – Nahum

0

इस कोड को मैं

public static IEnumerable<string> GetAddresses() 
{ 
     var host = Dns.GetHostEntry(Dns.GetHostName()); 
     return (from ip in host.AddressList where ip.AddressFamily == AddressFamily.lo select ip.ToString()).ToList(); 
} 
2
public static string GetIPAddress(string hostname) 
    { 
     IPHostEntry host; 
     host = Dns.GetHostEntry(hostname); 

     foreach (IPAddress ip in host.AddressList) 
     { 
      if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
      { 
       //System.Diagnostics.Debug.WriteLine("LocalIPadress: " + ip); 
       return ip.ToString(); 
      } 
     } 
     return string.Empty; 
    } 
-1

आईपीवी 6

lblIP.Text = System.Net.Dns.GetHostEntry (System.Net का इस्तेमाल किया है है सभी वैध पता सूची को खोजने के लिए। Dns.GetHostName) .AddressList (0) .ToString()


आईपीवी 4

lblIP.Text = System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName) .AddressList (1) .ToString()

+0

System.Net.Dns.GetHostName एक विधि है, न कि संपत्ति। – RenniePet

5
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName); 
IPAddress ipAddress = ipHostInfo.AddressList 
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork); 
संबंधित मुद्दे