「C Sharpの基礎 - デバイス情報」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「== 概要 == PCのデバイス情報には、以下に示すようなものがある。<br> * CPU *: 種類、速度、コア数 * メモリ *: 容量、種類、速度 * ストレージ *: 種類(HDD / SSD)、容量 * グラフィックカード *: モデル、VRAM容量 * マザーボード *: モデル、チップセット <br> * PCにインストールされているソフトウェア情報 *: OS (種類、バージョン) *: インストールされたドライ…」) |
(→有線LAN) |
||
60行目: | 60行目: | ||
using System.Linq; | using System.Linq; | ||
using System.Net.NetworkInformation; | using System.Net.NetworkInformation; | ||
using System.Net.Sockets; | |||
namespace GetWiredMACAddress; | namespace GetWiredMACAddress; | ||
68行目: | 69行目: | ||
{ | { | ||
try { | 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> | </syntaxhighlight> | ||
<br> | <br> | ||
==== 無線LAN ==== | ==== 無線LAN ==== | ||
以下の例では、無線LANのMACアドレスを取得している。<br> | 以下の例では、無線LANのMACアドレスを取得している。<br> |
2024年8月21日 (水) 04:56時点における版
概要
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}");
}
}
}