2015-11-18 8 views
6

पर स्थानीय आईपी पता कैसे ढूंढूं मैं वर्तमान में Win 10 UWP ऐप पर एक व्यवस्थापकीय कंसोल एप्लिकेशन पोर्ट करने का प्रयास कर रहा हूं। मुझे निम्न कंसोल कोड से System.Net.Dns का उपयोग करने में समस्या हो रही है।मैं Win 10 UWP प्रोजेक्ट

मैं उपकरणों आईपी

यहाँ सांत्वना अनुप्रयोग कोड है कि मैं अधिक बंदरगाह के लिए कोशिश कर रहा हूँ है कैसे प्राप्त कर सकते हैं। यह एक UWP अनुप्रयोग में मेजबान IPaddress पाने के लिए

public static string GetIP4Address() 
{ 
    string IP4Address = String.Empty; 
    foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName())) 
    { 
     if (IPA.AddressFamily == AddressFamily.InterNetwork) 
     { 
      IP4Address = IPA.ToString(); 
      break; 
     } 
    } 
    return IP4Address; 
} 

उत्तर

10

आप इस तरह की कोशिश कर सकते देखें:

private string GetLocalIp() 
{ 
    var icp = NetworkInformation.GetInternetConnectionProfile(); 

    if (icp?.NetworkAdapter == null) return null; 
    var hostname = 
     NetworkInformation.GetHostNames() 
      .SingleOrDefault(
       hn => 
        hn.IPInformation?.NetworkAdapter != null && hn.IPInformation.NetworkAdapter.NetworkAdapterId 
        == icp.NetworkAdapter.NetworkAdapterId); 

    // the ip address 
    return hostname?.CanonicalName; 
} 

उपरोक्त उत्तर भी सही है

,210
+0

द्वारा वर्चुअल स्विच सेटअप के आईपी एड्रेस को वापस कर रहा था। मुझे यह तय करने में मुश्किल हो रही है कि इनमें से कौन सा उपयोग करना है, इसलिए मैं थोड़ी सी प्रयोग के बाद जवाब चेक पर वापस जाऊंगा। –

+0

ऐसा प्रतीत होता है कि वे दोनों काम करते हैं लेकिन मैंने दूसरा स्थान चिह्नित किया क्योंकि यह एक विधि में था जो मेरे मूल उदाहरण की तरह स्ट्रिंग लौटाता था। यह कोडिंग वरीयता के "मेरी शैली" की तरह थोड़ा और भी है। धन्यवाद दोस्तों, आप लोगों ने दिन बचाया। –

+0

यह कोड वास्तव में और निश्चित रूप से लौटाता है, स्थानीय आईपी पता, 'अन्य कोड' आईपी पता देता है कि आपका डिवाइस या स्थानीय नेटवर्क इंटरनेट पर बाहर निकलने के लिए उपयोग करता है। – JuanK

12

का प्रयोग करें, मैं जाँच की है:

foreach (HostName localHostName in NetworkInformation.GetHostNames()) 
    { 
     if (localHostName.IPInformation != null) 
     { 
      if (localHostName.Type == HostNameType.Ipv4) 
      { 
       textblock.Text = localHostName.ToString(); 
       break; 
      } 
     } 
    } 

और एपीआई डॉक्टर here

+0

प्राप्त करने के लिए पैरामीटर मान यह काम नहीं करेगा यदि आपने वर्चुअलबॉक्स कहा है, तो मेरे मामले में अभिव्यक्ति NetworkInformation.GetHostNames()। FirstOrDefault (name => name.Type == HostNameType.Ipv4) ?. प्रदर्शित होने वाला नाम ?? "???"; वर्चुअलबॉक्स –

2

@ जॉन झांग द्वारा उत्तर के आधार पर है, लेकिन ठीक से कई मैचों के बारे में LINQ त्रुटि फेंक नहीं करने के लिए और वापसी IPv4 पता:

public static string GetLocalIp(HostNameType hostNameType = HostNameType.Ipv4) 
    { 
     var icp = NetworkInformation.GetInternetConnectionProfile(); 

     if (icp?.NetworkAdapter == null) return null; 
     var hostname = 
      NetworkInformation.GetHostNames() 
       .FirstOrDefault(
        hn => 
         hn.Type == hostNameType && 
         hn.IPInformation?.NetworkAdapter != null && 
         hn.IPInformation.NetworkAdapter.NetworkAdapterId == icp.NetworkAdapter.NetworkAdapterId); 

     // the ip address 
     return hostname?.CanonicalName; 
    } 

स्पष्ट रूप से आप आईपीवी 4 जो डिफ़ॉल्ट है के बजाय HostNameType.Ipv6 पारित कर सकते हैं (अंतर्निहित) Ipv6 पता

+0

ध्यान दें कि LINQ क्वेरी में HostNameType चेक जोड़ने के बाद इसने कई मैचों के बारे में अपवाद फेंकना बंद कर दिया, लेकिन सुरक्षित होने के लिए मैंने सिंगलऑर्डफॉल्ट को फर्स्टऑरडिफॉल्ट –

+0

में बदल दिया आश्चर्यचकित क्यों किया कि किसी ने इस जवाब को कम किया है जो कि दूसरों को सुधारता है (जहां गलत आईपी पते लौटाते हैं) –

+0

यह सबसे अच्छा जवाब है। निश्चित नहीं है कि यह क्यों नीचे मतदान किया गया था क्योंकि आपका उत्तर अधिकांश परिदृश्यों के लिए उपयोग करने का सबसे अच्छा कोड है। इसके अलावा, FirstOrDefault यहां उपयोग करने के लिए सबसे अच्छी LINQ विधि है, क्योंकि मशीन पर कई आईपी पते आईपीवी 4 या आईपीवी 6 हो सकते हैं। फ़ंक्शन GetFirstLocalIP() को कॉल करें और सब ठीक है। –

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