名前空間 System.Net.NetworkInformation
自己紹介
皆さま、こんにちは。私は風を読み、変化を告げる者。「NetworkChange」クラスは、ネットワークの状態変化を検知し、それを通知する役割を担っています。このクラスを使うと、プログラム内でネットワークの接続状況やIPアドレスの変更をリアルタイムに把握できます。例えば、Wi-Fiの切断や有線LANへの切り替えなどを即座に感知するのに便利です。
名前空間 System.Net.NetworkInformation
皆さま、こんにちは。私は風を読み、変化を告げる者。「NetworkChange」クラスは、ネットワークの状態変化を検知し、それを通知する役割を担っています。このクラスを使うと、プログラム内でネットワークの接続状況やIPアドレスの変更をリアルタイムに把握できます。例えば、Wi-Fiの切断や有線LANへの切り替えなどを即座に感知するのに便利です。
名前空間 System.Runtime.InteropServices
また会ったな。「DllImportAttribute」は、C#.NETにおいて外部のネイティブライブラリを呼び出すための魔法の鍵である。汝らに「DllImportAttribute」と「Win32API」を用いたIPアドレス調査の術を授けよう。
基本は【C#.NET解説】「DllImportAttribute」クラス 外部DLLの利用方法の基本を見るがいい
名前空間 System.Net.NetworkInformation
ほほう、そなたたちが求めるのは、ネットワークの状態を知る手段か。私は、自然の中で安らぎを求める者ではあるが、この道具「Pingクラス」を使うことで、遠く離れた場所とのつながりを確認することができるのだ。この道具をうまく使えば、ネットワークの状態を素早く把握できる。さあ、私と共にその使い方を学んでいこう。
名前空間 System.Net.NetworkInformation
わらわは戦いと炎を司る女神じゃ。ネットワークの複雑な構造も、わらわにかかれば手のひらの上よ。今日は「NetworkInterface」クラスについて語ってやろう。わらわの教えをしっかりと刻み込むがよい!
「NetworkInterface」クラスは、デバイスのネットワークインターフェイスに関する情報を取得するためのクラスじゃ。ネットワークアダプタの状態、MACアドレス、速度などを簡単に取得できる。
以下は基本的な使用例じゃ
using System.Net.NetworkInformation;
class Program
{
static void Main()
{
// すべてのネットワークインターフェイスを取得
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var ni in interfaces)
{
// 各インターフェイスの名前と状態を表示
Console.WriteLine($"名前: {ni.Name}, 状態: {ni.OperationalStatus}");
}
}
}
「NetworkInterface」クラスは、ネットワークの状態や構成を監視する場面で役立つが、パブリックIPアドレスの取得には直接対応しておらぬ。内向きのネットワーク構成情報を取得することが主な用途じゃ。
HttpClientクラスで取得できるが、今回は特別に教えてやろう
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
// HttpClient定義
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
// 外部IPサービスからパブリックIPを取得
string url = "https://api.ipify.org?format=json";
string result = await client.GetStringAsync(url);
Console.WriteLine($"パブリックIP: {result}");
}
}
注意点として、パブリックIPアドレスを取得する場合は「https://api.ipify.org」などの外部APIを利用する必要がある。
このクラスは、ネットワークに関するさまざまなメソッドを提供しておる。例えば
以下は、IPアドレスやDNS情報を取得する例じゃ
using System.Net.NetworkInformation;
class Program
{
static void Main()
{
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var ni in interfaces)
{
var ipProps = ni.GetIPProperties();
Console.WriteLine($"インターフェイス名: {ni.Name}");
// DNSアドレスを表示
foreach (var dns in ipProps.DnsAddresses)
{
Console.WriteLine($"DNSアドレス: {dns}");
}
// サブネット情報を表示
foreach (var unicast in ipProps.UnicastAddresses)
{
Console.WriteLine($"IPアドレス: {unicast.Address}, サブネットマスク: {unicast.IPv4Mask}");
}
}
}
}
ネットワークの状態を監視し、使用可能なインターフェイスを確認する方法を示す。
using System.Net.NetworkInformation;
class Program
{
static void Main()
{
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var ni in interfaces)
{
if (ni.OperationalStatus == OperationalStatus.Up)
{
Console.WriteLine($"使用可能なインターフェイス: {ni.Name}");
}
}
}
}
この方法を使えば、利用可能なネットワークだけを特定できる。
以下に、他の役立つメソッドを紹介しよう。
「Supports」の使用例を示す。
using System.Net.NetworkInformation;
class Program
{
static void Main()
{
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var ni in interfaces)
{
bool supportsIPv4 = ni.Supports(NetworkInterfaceComponent.IPv4);
Console.WriteLine($"インターフェイス名: {ni.Name}, IPv4対応: {supportsIPv4}");
}
}
}
これで、わらわの教えは終わりじゃ。ネットワークの力を存分に活かし、問題を打ち砕くがよい!