Получить текущие настройки NIC (VB.Net) - PullRequest
0 голосов
/ 20 февраля 2019

Итак, если коротко рассказать о том, что раздел моего кода, который я в настоящее время не могу понять, предназначен для отчета о текущих настройках IP данного сетевого адаптера, я хочу, чтобы он по существу выплевывал IP, Subnet и defaultшлюз, который он в данный момент установлен.У меня есть работающее решение, но оно, кажется, играет хорошо, только если сетевой адаптер настроен на DHCP, что не подходит для моего приложения.

Вот моя текущая функция (на самом деле это не функция, которую я знаю, но я знаю, как еще ее назвать.)

Public Sub NetGet()
    MainForm.NetLabelIP.Text = "IPv4 Address: "
    MainForm.NetLabelIP.Text = "subnet Mask: "
    MainForm.NetLabelIP.Text = "Default Gateway: "


    MainForm.NetLabelCN.Text = "Computer Name: " + System.Net.Dns.GetHostName()

    For Each ip In System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList
        If ip.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
            'IPv4 Adress
            MainForm.NetLabelIP.Text = "IPv4 Address: " + ip.ToString()



            For Each adapter As Net.NetworkInformation.NetworkInterface In Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
                If adapter.Name = MainForm.interfaceSelector.SelectedItem Then
                    For Each unicastIPAddressInformation As Net.NetworkInformation.UnicastIPAddressInformation In adapter.GetIPProperties().UnicastAddresses
                        If unicastIPAddressInformation.Address.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
                            If ip.Equals(unicastIPAddressInformation.Address) Then
                                'Subnet Mask
                                MainForm.NetLabelSM.Text = "Subnet Mask: " + unicastIPAddressInformation.IPv4Mask.ToString()

                                Dim adapterProperties As Net.NetworkInformation.IPInterfaceProperties = adapter.GetIPProperties()
                                For Each gateway As Net.NetworkInformation.GatewayIPAddressInformation In adapterProperties.GatewayAddresses
                                    'Default Gateway
                                    MainForm.NetLabelDG.Text = "Default Gateway: " + gateway.Address.ToString()
                                Next

                                If unicastIPAddressInformation.PrefixOrigin = 3 Then
                                    DHCP = True
                                    MainForm.NetLabelDHCP.Text = "DHCP Enabled: TRUE"
                                Else
                                    DHCP = False
                                    MainForm.NetLabelDHCP.Text = "DHCP Enabled: FALSE"
                                End If

                                ''DNS1
                                'if adapterproperties.dnsaddresses.count > 0 then
                                '    label5.text = adapterproperties.dnsaddresses(0).tostring()
                                'end if

                                ''DNS2
                                'if adapterproperties.dnsaddresses.count > 1 then
                                '    label6.text = adapterproperties.dnsaddresses(1).tostring()
                                'end if
                            End If
                        End If
                    Next
                End If
            Next
        End If
    Next

End Sub

Я предполагаю, что это будет что-то отвратительно глупое в ретроспективе,однако я чувствую, что лучше всего поделиться своим запросом с сообществом, чтобы любой, кто ищет подобное решение, мог найти свои ответы здесь.

Заранее спасибо, ребята.

1 Ответ

0 голосов
/ 20 февраля 2019

Этот класс NetInterfacesInfo реализует два статических (общих) метода, которые возвращают информацию о сетевых интерфейсах машины:

  1. NetInterfacesInfo.GetNetworkInterfaces()

Этот метод возвращает все сетевые интерфейсы, которые поддерживают IPV4, за исключением интерфейса обратной связи.
Информация возвращается в List(Of NetWorkInterfacesInfo), который предоставляет следующие свойства:

  • ConnectionName: имя, назначенное для соединения (Local Area Network (LAN))
  • Description: простое имя интерфейса
  • IPV4Addresses: упрощенный список каждого IP-адреса в виде строки, связанной NetMask и шлюза по умолчанию.
  • IpAddresses: список IP-адресов, связанных с сетевым интерфейсом.
  • DHCPSservers: список серверов DHCP, связанных с сетевым интерфейсом.
  • DnsServers: список DNS-серверов, связанных с сетевым интерфейсом.
  • Gateways: список адресов шлюзов, связанных с сетевым интерфейсом.
  • IsDHCPEnabled: указывает, предоставляется ли IP-адрес сервером DHCP или является статическим адресом.
  • MacAddress: MAC-адрес сетевой карты
  • Status: интерфейс работает (вверх) или нет (вниз)
  • InterfaceType: тип интерфейса.Это значение может быть одним из многих возможных типов интерфейсов: Wireless80211, Tunnel, FastEthernetFx и т. Д.

Свойство IPV4Addresses возвращает упрощенный список IP-адресов, связанных с сетевым интерфейсом.Эта информация содержится в классе IpV4AddressInfo, который обеспечивает следующие свойства:

  • IpAddress: строковое представление IP-адреса.
  • NetMask: строковое представление сетевой маски IP-адреса.
  • DefaultGateway: строковое представление адреса шлюза по умолчанию.
  • IsDnsEligible: указывает, что IP-адрес может отображаться в DNS (является маршрутизируемым)

Пример использования:

Dim allNicsInfo = NetInterfacesInfo.GetNetworkInterfaces()
For Each nic As NetInterfacesInfo.NetWorkInterfacesInfo In allNicsInfo
    Console.WriteLine($"Description: {nic.Description} Type: {nic.InterfaceType}")
Next

Dim Wireless = allNicsInfo.Where(Function(nic) nic.InterfaceType = NetworkInterfaceType.Wireless80211)

NetInterfacesInfo.IpV4AddressSimpleList

Упрощенный список IP-адресов, связанных с сетевым интерфейсом, также можно получить с помощью этого статического (общего) метода, предоставив имя (собственно, свойство Description) сетевого интерфейса.
Этот метод возвращает List(Of IpV4AddressInfo), упрощенную версию только для строки, каждого IP-адреса (указанной сети).Interface), его NetMask и связанный с ним шлюз по умолчанию.

Пример использования:

Dim nicInfo = NetInterfacesInfo.IpV4AddressSimpleList("Some NIC Name")

For Each ipV4Addr As NetInterfacesInfo.IpV4AddressInfo In nicInfo
    Console.WriteLine(ipV4Addr.IpAddress)
    Console.WriteLine(ipV4Addr.NetMask)
    Console.WriteLine(ipV4Addr.DefaultGateway)
Next

Присоединение основного класса к ComboBox:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim allNicsInfo = NetInterfacesInfo.GetNetworkInterfaces()
    ComboBox1.DisplayMember = "ConnectionName"
    ComboBox1.DataSource = allNicsInfo
End Sub

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    Dim cbo = DirectCast(sender, ComboBox)
    If cbo.SelectedIndex = -1 Then Return
    Dim nicInfo = DirectCast(cbo.SelectedItem, NetInterfacesInfo.NetWorkInterfacesInfo)
    TextBox1.Text = String.Join(Environment.NewLine, nicInfo.IPV4Addresses.
                    Select(Function(nic) $"IP Address: {nic.IpAddress} NetMask: {nic.NetMask}"))
    TextBox2.Text = nicInfo.IPV4Addresses.First().DefaultGateway
End Sub


Imports System.Linq
Imports System.Net
Imports System.Net.NetworkInformation
Imports System.Net.Sockets

Public Class NetInterfacesInfo

    Public Shared Function GetNetworkInterfaces() As List(Of NetWorkInterfacesInfo)
        Dim ifInfo As New List(Of NetWorkInterfacesInfo)()

        ifInfo.AddRange(GetNetworInterfaces().
            Where(Function(nic) nic.NetworkInterfaceType <> NetworkInterfaceType.Loopback AndAlso
                                nic.Supports(NetworkInterfaceComponent.IPv4)).
            Select(Function(nic) New NetWorkInterfacesInfo() With {
                .Description = nic.Description,
                .ConnectionName = nic.Name,
                .IsDHCPEnabled = nic.GetIPProperties().GetIPv4Properties().IsDhcpEnabled,
                .DHCPSservers = nic.GetIPProperties().DhcpServerAddresses.ToList(),
                .DnsServers = nic.GetIPProperties().DnsAddresses.ToList(),
                .Gateways = nic.GetIPProperties().GatewayAddresses.Select(Function(ipa) ipa.Address).ToList(),
                .InterfaceType = nic.NetworkInterfaceType,
                .IpAddresses = nic.GetIPProperties().UnicastAddresses.Select(Function(ipa) ipa.Address).ToList(),
                .MacAddress = nic.GetPhysicalAddress().GetAddressBytes().
                              Select(Function(b) b.ToString("X")).Aggregate(Function(s1, s2) s2 + ":" + s1),
                .Status = nic.OperationalStatus,
                .IPV4Addresses = GetIpV4AddressInfo(nic)
            }))
        Return ifInfo
    End Function

Public Shared Function IpV4AddressSimpleList(nicName As String) As List(Of IpV4AddressInfo)
    Dim nic = GetNetworInterfaceByName(nicName)
    If nic Is Nothing Then Return Nothing
    Return nic.GetIPProperties().UnicastAddresses.
            Where(Function(ipa) ipa.Address.AddressFamily = AddressFamily.InterNetwork).
            Select(Function(ipa) New IpV4AddressInfo() With {
                .IpAddress = ipa.Address?.ToString(),
                .NetMask = ipa.IPv4Mask?.ToString(),
                .IsDnsEligible = ipa.IsDnsEligible,
                .DefaultGateway = nic.GetIPProperties().GatewayAddresses.FirstOrDefault()?.Address?.ToString()
            }).ToList()
End Function

Private Shared Function GetIpV4AddressInfo(nic As NetworkInterface) As List(Of IpV4AddressInfo)
    Return nic.GetIPProperties().UnicastAddresses.
            Where(Function(ipa) ipa.Address.AddressFamily = AddressFamily.InterNetwork).
            Select(Function(ipa) New IpV4AddressInfo() With {
                .IpAddress = ipa.Address?.ToString(),
                .NetMask = ipa.IPv4Mask?.ToString(),
                .IsDnsEligible = ipa.IsDnsEligible,
                .DefaultGateway = nic.GetIPProperties().GatewayAddresses.FirstOrDefault()?.Address?.ToString()
            }).ToList()
End Function

    Private Shared Function GetNetworInterfaces() As NetworkInterface()
        Return NetworkInterface.GetAllNetworkInterfaces()
    End Function

    Private Shared Function GetNetworInterfaceByName(nicName As String) As NetworkInterface
        Return NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(Function(nic) nic.Name = nicName)
    End Function

    Public Class NetWorkInterfacesInfo
        Public Property ConnectionName As String
        Public Property Description As String
        Public Property IPV4Addresses As List(Of IpV4AddressInfo)
        Public Property IpAddresses As List(Of IPAddress)
        Public Property DHCPSservers As List(Of IPAddress)
        Public Property DnsServers As List(Of IPAddress)
        Public Property Gateways As List(Of IPAddress)
        Public Property IsDHCPEnabled As Boolean
        Public Property MacAddress As String
        Public Property Status As OperationalStatus
        Public Property InterfaceType As NetworkInterfaceType
    End Class

    Public Class IpV4AddressInfo
        Public Property IpAddress As String
        Public Property NetMask As String
        Public Property DefaultGateway As String
        Public Property IsDnsEligible As Boolean
    End Class

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...