सवाल Dns.GetHostEntry () से IPv4 पते प्राप्त करें


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

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

GetHostEntry के लिए प्रलेखन कहता है कि स्ट्रिंग में गुजर रहा है। लक्षण आपको स्थानीयहोस्ट का आईपीवी 4 पता मिलेगा। यह वही चीज है जो मैं चाहता हूं। समस्या यह है कि यह हमारी आईपीवी 6 मशीन पर ":: 1:" स्ट्रिंग को वापस कर रहा है, जो मुझे विश्वास है कि आईपीवी 6 पता है।

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

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


44
2018-06-29 17:38


मूल




जवाब:


क्या आपने देखा सभी पते बदले में, वालों को त्यागें परिवार इंटरनेटवर्कवी 6 और केवल आईपीवी 4 बनाए रखें?


61
2018-06-29 17:50



आह ... निश्चित रूप से। एक लाइटबुल पल। धन्यवाद! - zombat
+1: धन्यवाद - मैं इस सवाल से पूछने वाला था :) - Jon Cage
मेरा कॉल केवल आईपीवी 6 लौटा रहा है, कोई आईपीवी 4 प्रविष्टियां नहीं। यदि मैं करता हूँ Resolve-DnsName -Type A PowerShell में मुझे आईपीवी 4 वापस मिलता है (इस मामले में डिफ़ॉल्ट प्रकार यह एएएए है)। - kamranicus
@subkamran कृपया एक अलग प्रश्न के रूप में पूछें, टिप्पणी के रूप में नहीं - Remus Rusanu
यह मेरे कॉर्पोरेट पीसी पर डायरेक्ट एक्सेस के कारण है। उपेक्षा। - kamranicus


सभी स्थानीय आईपीवी 4 पते खोजने के लिए:

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

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


40
2018-04-15 17:19



@NahumLitvin लेकिन यह linq नहीं है? - Lukazoid
@lukazoid ita नहीं। मेरा मतलब लैम्ब्डा अभिव्यक्ति हो सकता है - Nahum


    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 घोषित करें और फार्म के किसी भी समारोह में उपयोग करें।


6
2017-10-15 08:43





IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);

5
2018-03-21 21:04





    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;
    }

2
2018-02-05 21:33





सभी मान्य पता सूची को खोजने के लिए यह वह कोड है जिसका मैंने उपयोग किया है

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();
}

0
2018-03-14 06:48





आईपीवी 6

lblip.Text = System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName)। एड्रेसलिस्ट (0)। ToString ()


आईपीवी 4

lblIP.Text = System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName)। एड्रेसलिस्ट (1)। टोस्टिंग ()


-2
2018-02-19 21:12



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