ローカルマシンのイーサネットIPアドレスを返す汎用VB.NETベースのアプリケーションを開発しようとしています。マシンのIPアドレスを取得するためにここで説明したいくつかの質問を参照し、いくつかの良い提案を見つけました。
私が直面している問題は、このアプリケーションを実行すると、WiFiとイーサネットの両方のIPアドレスが返されることです。このアプリケーションを他の人のマシンで実行すると、どのIPアドレスがどのインターフェイスに属しているのかわかりません。イーサネットIPアドレスのみに興味があります。
助言がありますか ??
IPアドレスのリストを返す関数は次のとおりです。
Function getIP() As String
Dim ips As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)
For Each ip In ips.AddressList
If (ip.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork) Then
MessageBox.Show(ip.ToString)
Return ip.ToString
End If
Next
Return Nothing
End Function
を介してIPアドレスを取得するのではなくIPHostEntry
、ネットワークアダプターを介して列挙し、各アダプターからIPアドレスを取得できます。
ANetworkInterface
は、NetworkInterfaceType
プロパティを介してそのタイプを提供します。イーサネットアダプタの場合、これはを返しますEthernet
。ワイヤレスアダプタの場合、ドキュメントには指定されていませんが、返さWireless80211
れました。
サンプルコード:
Imports System.Net.NetworkInformation
Public Class Sample
Function GetIP() As String
Dim networkInterfaces() As NetworkInterface
networkInterfaces = NetworkInterface.GetAllNetworkInterfaces()
For Each networkInterface In networkInterfaces
If networkInterface.NetworkInterfaceType = NetworkInterfaceType.Ethernet Then
For Each address In networkInterface.GetIPProperties().UnicastAddresses
If address.Address.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
Return address.Address.ToString()
End If
Next address
End If
Next networkInterface
Return Nothing
End Function
End Class
または、もう少し簡潔なバージョンが必要な場合は、LINQ(上記のコードと同等)を使用できます。
Function GetIP() As String
Return (
From networkInterface In networkInterface.GetAllNetworkInterfaces()
Where networkInterface.NetworkInterfaceType = NetworkInterfaceType.Ethernet
From address In networkInterface.GetIPProperties().UnicastAddresses
Where address.Address.AddressFamily = Net.Sockets.AddressFamily.InterNetwork
Select ip = address.Address.ToString()
).FirstOrDefault()
End Function
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加