0

重複の可能性:
C# で自分の IP アドレスを取得するには?

私の質問は、見た目と同じくらい簡単です。IP アドレスと MAC アドレスを見つけて、テキスト ボックスに表示するだけです。ホスト名は取得できますが、そこから IP アドレスを取得する方法がわかりません。Visual Studio 2012 (.Net Framework 4.5) で VB.NET を使用しています。問題は、Visual Studio 2012 で .NET の名前空間の一部が変更または移動されたことです。

4

3 に答える 3

0

ホスト アドレス リストからホスト名、次に IP を取得します。

Dim host = Dns.GetHostEntry(Dns.GetHostName())
Dim ip = host.AddressList.FirstOrDefault(Function(x as IPAddress) _
    x.AddressFamily = System.Net.Sockets.AddressFamily.Internetwork)

同様に、マシン内の 1 つ以上のネットワーク アダプターの MAC アドレスを取得できます (サンプル コードは、利用可能な最初のアダプターを見つける方法を示しています)。

Dim networkInterface = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
Dim firstNetwork = networkInterface.FirstOrDefault(Function(x as System.Net.NetworkInformation.NetworkInterface) _
    x.OperationalStatus = System.Net.NetworkInformation.OperationalStatus.Up)
Dim firstMacAddressOfWorkingNetworkAdapter = firstNetwork.GetPhysicalAddress()
于 2012-11-28T17:43:20.250 に答える
0

これを試して:-

 public string GetLocalIP()
 {
string _IP = null; 
System.Net.IPHostEntry _IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());

foreach (System.Net.IPAddress _IPAddress in _IPHostEntry.AddressList)
{
    if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
    {
        _IP = _IPAddress.ToString();
    }
}
return _IP;
}

また

Try
        Dim IpCollection As New Collection

        Dim i As Integer

        Dim ipE As Net.IPHostEntry = System.Net.Dns.GetHostEntry(-HOSTNAME-)
        Dim IpA() As Net.IPAddress = ipE.AddressList

        For i = 0 To IpA.GetUpperBound(0)
            IpCollection.Add(IpA(i).ToString)
        Next

        Dim Ipaddress As String

        Ipaddress = IpCollection.GetValue(-Num-)

    Catch ex As Exception
        MsgBox("An error has occured")
    End Try

MAC アドレスを取得する場合:-

  Using mc As New ManagementClass("Win32_NetworkAdapterConfiguration")
For Each mo As ManagementObject In mc.GetInstances()
    Console.WriteLine(mo("MacAddress").ToString())
Next
   End Using
于 2012-11-28T17:42:15.640 に答える
0

まず、返したいすべての情報を保持できるクラスを作成します。

Public Class NetworkInterfaceInfo
    Public Sub New(ByVal ipAddress As IPAddress, ByVal physicalAddress As PhysicalAddress)
        _ipAddress = ipAddress
        _physicalAddress = physicalAddress
    End Sub

    Public ReadOnly Property IpAddress() As IPAddress
        Get
            Return _ipAddress
        End Get
    End Property
    Private _ipAddress As IPAddress

    Public ReadOnly Property PhysicalAddress() As PhysicalAddress
        Get
            Return _physicalAddress
        End Get
    End Property
    Private _physicalAddress As PhysicalAddress
End Class

次に、すべてのネットワーク インターフェイスをループして、基準を満たすものを見つけるメソッドを作成します。次に、基準を満たすものが見つかるまで、それらのインターフェイスのすべての IP アドレスをループします。一致が見つかったら、情報を返します。

Public Function GetNetworkInterfaceInfo() As NetworkInterfaceInfo
    For Each networkInterface As NetworkInterface In networkInterface.GetAllNetworkInterfaces()
        If networkInterface.OperationalStatus = OperationalStatus.Up Then
            For Each address As IPAddress In networkInterface.GetIPProperties().DnsAddresses()
                If address.AddressFamily = AddressFamily.InterNetwork Then
                    Return New NetworkInterfaceInfo(address, networkInterface.GetPhysicalAddress())
                End If
            Next
        End If
    Next
    Return Nothing
End Function
于 2012-11-28T17:48:57.893 に答える