Saya tahu ini mungkin menendang kuda mati, tapi mungkin ini bisa membantu seseorang. Saya telah mencari di mana-mana cara untuk menemukan alamat IP lokal saya, tetapi di mana-mana saya menemukan mengatakan untuk menggunakan
Dns.GetHostEntry(Dns.GetHostName());
Saya tidak suka ini sama sekali karena hanya mendapatkan semua alamat yang diberikan ke komputer Anda. Jika Anda memiliki beberapa antarmuka jaringan (yang hampir semua komputer lakukan sekarang-a-hari), Anda tidak tahu alamat mana yang cocok dengan antarmuka jaringan mana. Setelah melakukan banyak penelitian, saya membuat fungsi untuk menggunakan kelas NetworkInterface dan menarik informasi darinya. Dengan cara ini saya bisa tahu apa jenis antarmuka itu (Ethernet, nirkabel, loopback, terowongan, dll), apakah itu aktif atau tidak, dan SOOO lebih.
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;
}
Sekarang untuk mendapatkan alamat IPv4 dari panggilan antarmuka jaringan Ethernet Anda:
GetLocalIPv4(NetworkInterfaceType.Ethernet);
Atau antarmuka Nirkabel Anda:
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
Jika Anda mencoba untuk mendapatkan alamat IPv4 untuk antarmuka nirkabel, tetapi komputer Anda tidak memiliki kartu nirkabel yang terpasang, itu hanya akan mengembalikan string kosong. Hal yang sama dengan antarmuka Ethernet.
Semoga ini bisa membantu seseorang! :-)
EDIT:
Telah ditunjukkan (terima kasih @NasBanov) bahwa meskipun fungsi ini berfungsi untuk mengekstraksi alamat IP dengan cara yang jauh lebih baik daripada menggunakannya Dns.GetHostEntry(Dns.GetHostName())
tidak baik untuk mendukung beberapa antarmuka dengan tipe yang sama atau beberapa alamat IP pada satu antarmuka. . Ini hanya akan mengembalikan satu alamat IP ketika mungkin ada beberapa alamat yang ditetapkan. Untuk mengembalikan SEMUA alamat yang ditugaskan ini, Anda cukup memanipulasi fungsi asli untuk selalu mengembalikan array alih-alih string tunggal. Sebagai contoh:
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();
}
Sekarang fungsi ini akan mengembalikan SEMUA alamat yang ditugaskan untuk jenis antarmuka tertentu. Sekarang untuk mendapatkan hanya satu string, Anda bisa menggunakan .FirstOrDefault()
ekstensi untuk mengembalikan item pertama dalam array atau, jika kosong, kembalikan string kosong.
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
If I am not connected to a network and I am connected to the internet
Pernyataan ini sepertinya kontradiktif. Apakah Anda mencoba mencari tahu apakah komputer Anda terhubung ke LAN pribadi atau Internet?