私はこれが死んだ馬を蹴っているかもしれないことを知っていますが、おそらくこれは誰かを助けることができます。私は自分のローカルIPアドレスを見つける方法をあちこち探してきましたが、どこにでもあると書いてあります:
Dns.GetHostEntry(Dns.GetHostName());
コンピュータに割り当てられたすべてのアドレスを取得するだけなので、これはまったく好きではありません。複数のネットワークインターフェイスがある場合(ほとんどすべてのコンピューターで現在使用されています)、どのネットワークインターフェイスにどのアドレスが対応しているかがわかりません。一連の調査を行った後、NetworkInterfaceクラスを使用して情報をヤンクする関数を作成しました。このようにして、インターフェースのタイプ(イーサネット、ワイヤレス、ループバック、トンネルなど)、アクティブかどうか、そしてはるかにわかります。
public string GetLocalIPv4(NetworkInterfaceType _type)
{
string output = "";
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
output = ip.Address.ToString();
}
}
}
}
return output;
}
次に、イーサネットネットワークインターフェイスコールのIPv4アドレスを取得します。
GetLocalIPv4(NetworkInterfaceType.Ethernet);
または、ワイヤレスインターフェイス:
GetLocalIPv4(NetworkInterfaceType.Wireless80211);
ワイヤレスインターフェイスのIPv4アドレスを取得しようとしたが、コンピューターにワイヤレスカードがインストールされていない場合、空の文字列が返されます。イーサネットインターフェイスについても同様です。
これが誰かを助けることを願っています!:-)
編集:
この機能はIPアドレスの抽出よりもはるかに優れた方法でIPアドレスを抽出するもののDns.GetHostEntry(Dns.GetHostName())
、同じタイプの複数のインターフェースまたは単一のインターフェースで複数のIPアドレスをサポートすることはあまりうまくいかないことが指摘されました(@NasBanovに感謝)。複数のアドレスが割り当てられている可能性がある場合は、単一のIPアドレスのみを返します。これらの割り当てられたアドレスをすべて返すには、元の関数を操作して、常に単一の文字列ではなく配列を返すようにします。例えば:
public static string[] GetAllLocalIPv4(NetworkInterfaceType _type)
{
List<string> ipAddrList = new List<string>();
foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
{
if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
{
foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
ipAddrList.Add(ip.Address.ToString());
}
}
}
}
return ipAddrList.ToArray();
}
この関数は、特定のインターフェイスタイプに割り当てられたすべてのアドレスを返します。単一の文字列のみを取得するには、.FirstOrDefault()
拡張機能を使用して配列の最初の項目を返すか、それが空の場合は空の文字列を返すことができます。
GetLocalIPv4(NetworkInterfaceType.Ethernet).FirstOrDefault();
If I am not connected to a network and I am connected to the internet
この発言は矛盾しているようです。コンピュータがプライベートLANまたはインターネットに接続されているかどうかを確認しようとしていますか?