Как получить сетевой интерфейс и его правый IPv4-адрес?
Мне нужно знать, как получить все сетевые интерфейсы с помощью IPv4. Или просто беспроводной и Ethernet.
Чтобы получить информацию о всех сетевых интерфейсах, я использую следующее:
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) {
if(ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet) {
Console.WriteLine(ni.Name);
}
}
И чтобы получить все размещенные IPv4-адреса компьютера:
IPAddress [] IPS = Dns.GetHostAddresses(Dns.GetHostName());
foreach (IPAddress ip in IPS) {
if (ip.AddressFamily == AddressFamily.InterNetwork) {
Console.WriteLine("IP address: " + ip);
}
}
Но как получить сетевой интерфейс и его правый адрес ipv4?
Ответы
Ответ 1
foreach(NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
if(ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
{
Console.WriteLine(ni.Name);
foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
Console.WriteLine(ip.Address.ToString());
}
}
}
}
Это должно получить то, что вы хотите. ip.Address - это IP-адрес, который вы хотите.
Ответ 2
С некоторым улучшением этот код добавляет любой интерфейс в комбинацию:
private void LanSetting_Load(object sender, EventArgs e)
{
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if ((nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet) || (nic.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)) //&& (nic.OperationalStatus == OperationalStatus.Up))
{
comboBoxLanInternet.Items.Add(nic.Description);
}
}
}
И при выборе одного из них этот код возвращает IP-адрес интерфейса:
private void comboBoxLanInternet_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation ip in nic.GetIPProperties().UnicastAddresses)
{
if (nic.Description == comboBoxLanInternet.SelectedItem.ToString())
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
MessageBox.Show(ip.Address.ToString());
}
}
}
}
}