C Sharpの基礎 - デバイス情報
ナビゲーションに移動
検索に移動
概要
PCのデバイス情報には、以下に示すようなものがある。
- CPU
- 種類、速度、コア数
- メモリ
- 容量、種類、速度
- ストレージ
- 種類(HDD / SSD)、容量
- グラフィックカード
- モデル、VRAM容量
- マザーボード
- モデル、チップセット
- PCにインストールされているソフトウェア情報
- OS (種類、バージョン)
- インストールされたドライバ
- インストールされたアプリケーション
- ネットワーク情報
- IPアドレス
- MACアドレス
- ネットワークアダプタの種類
- 周辺機器情報
- 接続されたモニタ
- プリンタ
- その他のUSBデバイス
デバイス情報を取得することのメリットを以下に示す。
- アプリケーションのパフォーマンス最適化
- ハードウェア情報に基づいて処理を調整できる。
- トラブルシューティング
- システム情報を使って問題の原因特定が容易になる。
- ユーザエクスペリエンスの向上
- デバイスに適したUIや機能を提供できる。
- セキュリティ強化
- デバイス固有の情報を認証に利用できる。
また、デバイス情報を取得するにあたり、以下に示すようなデメリットも存在する。
- プライバシーの懸念
- ユーザの個人情報を収集する可能性がある。
- セキュリティリスク
- 悪用される可能性のある情報を取得する。
- 互換性の問題
- OSやハードウェアの変更により、取得方法が変わる可能性がある。
- パフォーマンスへの影響
- 頻繁な情報取得はシステムに負荷をかける可能性がある。
ネットワークインターフェース
有線LAN
以下の例では、有線LANのMACアドレスを取得している。
- まず、全てのネットワークインターフェースを取得する。
- 有線LANインターフェース (Ethernet) を検索して、稼働中のインターフェースが存在するかどうかを確認する。
- 存在する場合、そのインターフェースのMACアドレスを取得して表示する。
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}");
}
}
}
無線LAN
以下の例では、無線LANのMACアドレスを取得している。
- まず、全てのネットワークインターフェースを取得する。
- 無線LANインターフェース (IEEE802.11) を検索して、稼働中のインターフェースが存在するかどうかを確認する。
- 存在する場合、そのインターフェースのMACアドレスを取得して表示する。
using System;
using System.Linq;
using System.Net.NetworkInformation;
class Program
{
public static void Main()
{
try {
// 全てのネットワークインターフェースを取得
var nics = NetworkInterface.GetAllNetworkInterfaces();
// 稼働中の無線LANインターフェースを検索
var wirelessNic = nics.FirstOrDefault(nic =>
nic.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 &&
nic.OperationalStatus == OperationalStatus.Up);
if (wirelessNic != null) {
// 稼働中の無線LANのMACアドレスを取得
var address = wirelessNic.GetPhysicalAddress();
var bytes = address.GetAddressBytes();
// 稼働中の無線LANのMACアドレスを文字列形式に変換
// 表示形式は、16進数の大文字 (AA-BB-CC-DD-EE-FF)
string macAddress = string.Join("-", bytes.Select(b => b.ToString("X2")));
// 稼働中の無線LANのMACアドレスを表示
Console.WriteLine($"無線LANのMACアドレス: {macAddress}");
}
else {
Console.WriteLine("無線LANインターフェースが見つかりませんでした。");
}
}
catch (Exception ex) {
Console.WriteLine($"エラーが発生しました: {ex.Message}");
}
}
}