मुझे पता है कि यह एक मरे हुए घोड़े को मार सकता है, लेकिन शायद यह किसी की मदद कर सकता है। मैंने अपने स्थानीय आईपी पते को खोजने के लिए सभी जगह देखा है, लेकिन हर जगह मुझे लगता है कि इसका उपयोग करने के लिए कहा गया है:
Dns.GetHostEntry(Dns.GetHostName());
मुझे यह बिल्कुल पसंद नहीं है क्योंकि यह सिर्फ आपके कंप्यूटर को दिए गए सभी पते प्राप्त करता है। यदि आपके पास कई नेटवर्क इंटरफेस हैं (जो बहुत सारे कंप्यूटर अब-ए-दिन करते हैं) तो आपको पता नहीं है कि कौन सा पता किस नेटवर्क इंटरफ़ेस के साथ जाता है। अनुसंधान का एक गुच्छा करने के बाद मैंने NetworkInterface क्लास का उपयोग करने के लिए एक फ़ंक्शन बनाया और उसमें से जानकारी को बाहर निकाला। इस तरह से मैं बता सकता हूं कि यह किस प्रकार का इंटरफ़ेस है (ईथरनेट, वायरलेस, लूपबैक, टनल, आदि), यह सक्रिय है या नहीं, और SOOO और भी बहुत कुछ।
public string GetLocalIPv4(NetworkInterfaceType _type)
{
string output = "";
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output = ip.Address.ToString();
}
}
}
}
return output;
}
अब अपने ईथरनेट नेटवर्क इंटरफेस कॉल का IPv4 पता पाने के लिए:
GetLocalIPv4(NetworkInterfaceType.Ethernet);
या आपका वायरलेस इंटरफ़ेस:
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
यदि आप वायरलेस इंटरफ़ेस के लिए IPv4 पता प्राप्त करने का प्रयास करते हैं, लेकिन आपके कंप्यूटर में वायरलेस कार्ड स्थापित नहीं है, तो यह केवल एक खाली स्ट्रिंग लौटाएगा। ईथरनेट इंटरफेस के साथ एक ही बात।
आशा है कि यह किसी की मदद करता है! :-)
संपादित करें:
यह इंगित किया गया था (धन्यवाद @NasBanov) कि भले ही यह फ़ंक्शन आईपी पते को बहुत बेहतर तरीके से निकालने के बारे में हो, Dns.GetHostEntry(Dns.GetHostName())
लेकिन इसका उपयोग करने से एक ही प्रकार के कई इंटरफेस या एक ही इंटरफ़ेस पर कई आईपी पते का समर्थन करने में बहुत अच्छा नहीं होता है । यह केवल एक ही IP पता लौटाएगा जब कई पते असाइन किए जा सकते हैं। इन सभी असाइन किए गए पतों को वापस करने के लिए आप मूल फ़ंक्शन में हेरफेर कर सकते हैं ताकि एक स्ट्रिंग के बजाय हमेशा एक सरणी लौटा सकें। उदाहरण के लिए:
public static string[] GetAllLocalIPv4(NetworkInterfaceType _type)
{
List<string> ipAddrList = new List<string>();
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
ipAddrList.Add(ip.Address.ToString());
}
}
}
}
return ipAddrList.ToArray();
}
अब यह फ़ंक्शन विशिष्ट इंटरफ़ेस प्रकार के लिए सभी असाइन किए गए पते वापस कर देगा। अब केवल एक स्ट्रिंग प्राप्त करने के लिए, आप .FirstOrDefault()
एरे में पहला आइटम वापस करने के लिए एक्सटेंशन का उपयोग कर सकते हैं या यदि यह खाली है, तो एक खाली स्ट्रिंग लौटाएं।
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
If I am not connected to a network and I am connected to the internet
यह कथन विरोधाभासी लगता है। क्या आप यह पता लगाने की कोशिश कर रहे हैं कि क्या आपका कंप्यूटर एक निजी LAN या इंटरनेट से जुड़ा है?