重複の可能性:
C# で自分の IP アドレスを取得するには?
私の質問は、見た目と同じくらい簡単です。IP アドレスと MAC アドレスを見つけて、テキスト ボックスに表示するだけです。ホスト名は取得できますが、そこから IP アドレスを取得する方法がわかりません。Visual Studio 2012 (.Net Framework 4.5) で VB.NET を使用しています。問題は、Visual Studio 2012 で .NET の名前空間の一部が変更または移動されたことです。
重複の可能性:
C# で自分の IP アドレスを取得するには?
私の質問は、見た目と同じくらい簡単です。IP アドレスと MAC アドレスを見つけて、テキスト ボックスに表示するだけです。ホスト名は取得できますが、そこから IP アドレスを取得する方法がわかりません。Visual Studio 2012 (.Net Framework 4.5) で VB.NET を使用しています。問題は、Visual Studio 2012 で .NET の名前空間の一部が変更または移動されたことです。
ホスト アドレス リストからホスト名、次に 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()
これを試して:-
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
まず、返したいすべての情報を保持できるクラスを作成します。
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