MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C Sharpの基礎 - デバイス情報のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C Sharpの基礎 - デバイス情報
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == PCのデバイス情報には、以下に示すようなものがある。<br> * CPU *: 種類、速度、コア数 * メモリ *: 容量、種類、速度 * ストレージ *: 種類(HDD / SSD)、容量 * グラフィックカード *: モデル、VRAM容量 * マザーボード *: モデル、チップセット <br> * PCにインストールされているソフトウェア情報 *: OS (種類、バージョン) *: インストールされたドライバ *: インストールされたアプリケーション <br> * ネットワーク情報 *: IPアドレス *: MACアドレス *: ネットワークアダプタの種類 <br> * 周辺機器情報 *: 接続されたモニタ *: プリンタ *: その他のUSBデバイス <br> デバイス情報を取得することのメリットを以下に示す。<br> * アプリケーションのパフォーマンス最適化 *: ハードウェア情報に基づいて処理を調整できる。 * トラブルシューティング *: システム情報を使って問題の原因特定が容易になる。 * ユーザエクスペリエンスの向上 *: デバイスに適したUIや機能を提供できる。 * セキュリティ強化 *: デバイス固有の情報を認証に利用できる。 <br> また、デバイス情報を取得するにあたり、以下に示すようなデメリットも存在する。<br> * プライバシーの懸念 *: ユーザの個人情報を収集する可能性がある。 * セキュリティリスク *: 悪用される可能性のある情報を取得する。 * 互換性の問題 *: OSやハードウェアの変更により、取得方法が変わる可能性がある。 * パフォーマンスへの影響 *: 頻繁な情報取得はシステムに負荷をかける可能性がある。 <br><br> == ネットワークインターフェース == ==== 有線LAN ==== 以下の例では、イーサネット (有線LAN) の情報を取得している。<br> * ネットワークアダプタの説明 * ネットワークアダプタの種類 * MACアドレス * IPv4アドレス (存在する場合) * 全てのIPv6アドレス (存在する場合) <br> IPv6アドレスには、一般的に、グローバルアドレス、リンクローカルアドレス、一時アドレス等、複数の種類が存在する可能性がある。<br> 以下に示すサンプルコードでは、これら全てを表示している。<br> <br> # まず、全てのネットワークインターフェースを取得する。 # イーサネット (有線LAN) インターフェースを検索して、稼働中のインターフェースが存在するかどうかを確認する。 # 存在する場合、そのインターフェースの情報を取得して表示する。 <br> <syntaxhighlight lang="c#"> using System; using System.Linq; using System.Net.NetworkInformation; using System.Net.Sockets; namespace GetWiredMACAddress; class Program { public static void Main() { try { foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) { // 稼働中のイーサネット (有線LAN) インターフェースの情報を検索 if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet && nic.OperationalStatus == OperationalStatus.Up) { Console.WriteLine($"ネットワークアダプタ: {nic.Description}"); Console.WriteLine($"アダプタの種類: {nic.NetworkInterfaceType}"); // 稼働中の有線LANのMACアドレスを取得して文字列形式に変換 // 表示形式は、16進数の大文字 (AA-BB-CC-DD-EE-FF) PhysicalAddress mac = nic.GetPhysicalAddress(); string macAddress = BitConverter.ToString(mac.GetAddressBytes()).Replace("-", ":"); Console.WriteLine($"MACアドレス: {macAddress}"); // 稼働中の有線LANのIPアドレスを取得 var ipProperties = nic.GetIPProperties(); // 稼働中の有線LANのIPv4アドレスを取得 var ipv4Address = ipProperties.UnicastAddresses .FirstOrDefault(addr => addr.Address.AddressFamily == AddressFamily.InterNetwork); if (ipv4Address != null) { Console.WriteLine($"IPv4アドレス: {ipv4Address.Address}"); } else { Console.WriteLine("IPv4アドレスが見つかりません。"); } // 稼働中の有線LANのIPv6アドレスを取得 var ipv6Addresses = ipProperties.UnicastAddresses .Where(addr => addr.Address.AddressFamily == AddressFamily.InterNetworkV6) .Select(addr => addr.Address) .ToList(); if (ipv6Addresses.Any()) { Console.WriteLine("IPv6アドレス:"); foreach (var ipv6 in ipv6Addresses) { Console.WriteLine($"{ipv6}"); } } else { Console.WriteLine("IPv6アドレスが見つかりません。"); } } } } catch (Exception ex) { Console.WriteLine($"エラーが発生しました: {ex.Message}"); } } } </syntaxhighlight> <br> ==== 無線LAN ==== 以下の例では、無線LANの情報を取得している。<br> * ネットワークアダプタの説明 * ネットワークアダプタの種類 * MACアドレス * IPv4アドレス (存在する場合) * 全てのIPv6アドレス (存在する場合) * SSID * 信号強度 <br> IPv6アドレスには、一般的に、グローバルアドレス、リンクローカルアドレス、一時アドレス等、複数の種類が存在する可能性がある。<br> 以下に示すサンプルコードでは、これら全てを表示している。<br> <br> # まず、全てのネットワークインターフェースを取得する。 # 無線LAN インターフェースを検索して、稼働中のインターフェースが存在するかどうかを確認する。 # 存在する場合、そのインターフェースの情報を取得して表示する。 <br> SSIDと信号強度の取得は、使用するOSやライブラリにより実装方法が異なる。<br> そのため、以下に示すような方法を検討する必要がある。<br> * Windows *: Native Wi-Fi APIを使用する。 *: または、Managed-Wifiライブラリを使用する。 * Linux *: /proc/net/wirelessファイルを読み込む、または、iwconfigコマンドの出力を解析する。 *: <br> *: あるいは、Tmds.DBusライブラリを使用して、NetworkManagerのD-Busを通じてWiFi情報にアクセスする。 *: ただし、NetworkManagerへのアクセスに必要なため、root権限が必要な場合がある。 *: <br> *: プロジェクトにTmds.DBusライブラリを追加する場合は、NuGetパッケージを追加する。<br> *: <code>dotnet add package Tmds.DBus</code> * MacOS *: CoreWLANフレームワークを使用する。 <br> <syntaxhighlight lang="c#"> using System; using System.Linq; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Threading.Tasks; using Tmds.DBus; namespace GetWiredMACAddress; class Program { public static void Main() { try { foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) { // 稼働中のイーサネット (無線LAN) インターフェースの情報を検索 if (nic.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 && nic.OperationalStatus == OperationalStatus.Up) { Console.WriteLine($"ネットワークアダプタ: {nic.Description}"); Console.WriteLine($"アダプタの種類: {nic.NetworkInterfaceType}"); // 稼働中の無線LANのMACアドレスを取得して文字列形式に変換 // 表示形式は、16進数の大文字 (AA-BB-CC-DD-EE-FF) PhysicalAddress mac = nic.GetPhysicalAddress(); string macAddress = BitConverter.ToString(mac.GetAddressBytes()).Replace("-", ":"); Console.WriteLine($"MACアドレス: {macAddress}"); // 稼働中の無線LANのIPアドレスを取得 var ipProperties = nic.GetIPProperties(); // 稼働中の有線LANのIPv4アドレスを取得 var ipv4Address = ipProperties.UnicastAddresses .FirstOrDefault(addr => addr.Address.AddressFamily == AddressFamily.InterNetwork); if (ipv4Address != null) { Console.WriteLine($"IPv4アドレス: {ipv4Address.Address}"); } else { Console.WriteLine("IPv4アドレスが見つかりません。"); } // 稼働中の無線LANのIPv6アドレスを取得 var ipv6Addresses = ipProperties.UnicastAddresses .Where(addr => addr.Address.AddressFamily == AddressFamily.InterNetworkV6) .Select(addr => addr.Address) .ToList(); if (ipv6Addresses.Any()) { Console.WriteLine("IPv6アドレス:"); foreach (var ipv6 in ipv6Addresses) { Console.WriteLine($"{ipv6}"); } } else { Console.WriteLine("IPv6アドレスが見つかりません。"); } // SSIDおよび信号強度の取得 var (ssid, strength) = await GetWifiInfo(nic.Name); Console.WriteLine($"SSID: {ssid}"); Console.WriteLine($"信号強度: {strength}"); } } } catch (Exception ex) { Console.WriteLine($"エラーが発生しました: {ex.Message}"); } } // D-Busを使用してSSIDおよび信号強度を取得する static async Task<(string ssid, int strength)> GetWifiInfo(string interfaceName) { var connection = Connection.System; var nmManager = connection.CreateProxy<INetworkManager>("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager"); var devices = await nmManager.GetDevicesAsync(); foreach (var devicePath in devices) { var device = connection.CreateProxy<IDevice>("org.freedesktop.NetworkManager", devicePath); var deviceInterface = await device.GetInterfaceAsync(); if (deviceInterface == interfaceName) { var wifiDevice = connection.CreateProxy<IWifiDevice>("org.freedesktop.NetworkManager", devicePath); var activeAccessPoint = await wifiDevice.GetActiveAccessPointAsync(); if (activeAccessPoint != "/") { var ap = connection.CreateProxy<IAccessPoint>("org.freedesktop.NetworkManager", activeAccessPoint); var ssid = System.Text.Encoding.UTF8.GetString(await ap.GetSsidAsync()); var strength = await ap.GetStrengthAsync(); return (ssid, strength); } } } return ("Not connected", 0); } } // Linux // NetworkManagerのD-Busインターフェース名およびD-Busインターフェースメソッド [DBusInterface("org.freedesktop.NetworkManager")] interface INetworkManager { Task<ObjectPath[]> GetDevicesAsync(); } [DBusInterface("org.freedesktop.NetworkManager.Device")] interface IDevice { Task<string> GetInterfaceAsync(); } [DBusInterface("org.freedesktop.NetworkManager.Device.Wireless")] interface IWifiDevice { Task<ObjectPath> GetActiveAccessPointAsync(); } [DBusInterface("org.freedesktop.NetworkManager.AccessPoint")] interface IAccessPoint { Task<byte[]> GetSsidAsync(); Task<byte> GetStrengthAsync(); } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C_Sharp]]
C Sharpの基礎 - デバイス情報
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse