C# で ローカルマシン情報 を 取得 する 方法

0 件のコメント

ローカルマシン の IPアドレス、MACアドレス、コンピューター名、ログイン中ユーザー名 を取得する サンプルコード を掲載します。 どちらかと言うと、クライアントアプリ側に対する実装での利用を想定しています。

目次

IPアドレス

最近は IPv4 だけでなく、 IPv6 も考慮しないといけないですし、PC 1台 に必ずしも 1つ の ネットワークカード とも限りません(ノートPC で 無線 と 有線 の2ポート等)。 また、物理的な ネットワークインターフェース 1つ に対して 複数のIPアドレス を設定することもできます。 ここでは すべての "有効な" ネットワークインターフェース に対して、 IPv4、IPv6 関わらずすべての IPアドレス を取得するようなコードを記載します。

"有効な" インターフェース のみを取得するようにしているのは、実際に取得したIPアドレスを利用しようとした際(Socket通信とかしようとした際)、有効なインターフェースに対してでしか利用できないからです。

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;

public List<IPAddress> GetLocalIPAddress()
{
    var ipaddress = new List();

    // 物理インターフェース情報をすべて取得
    var interfaces = NetworkInterface.GetAllNetworkInterfaces();

    // 各インターフェースごとの情報を調べる
    foreach (var adapter in interfaces)
    {
        // 有効なインターフェースのみを対象とする
        if (adapter.OperationalStatus != OperationalStatus.Up)
        {
            continue;
        }

        // インターフェースに設定されたIPアドレス情報を取得
        var properties = adapter.GetIPProperties();

        // 設定されているすべてのユニキャストアドレスについて
        foreach (var unicast in properties.UnicastAddresses)
        {
            if (unicast.Address.AddressFamily == AddressFamily.InterNetwork)
            {
                // IPv4アドレス
                ipaddress.Add(unicast.Address);
            }
            else if (unicast.Address.AddressFamily == AddressFamily.InterNetworkV6)
            {
                // IPv6アドレス
                ipaddress.Add(unicast.Address);
            }
        }
    }

    return ipaddress;
}

MACアドレス

IPアドレス の取得と似ていますが、MACアドレス は 物理的な インターフェース 1つ に対して必ず 1つ しか存在しないのでやや簡単なコードになります。

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;

public List GetLocalPhysicalAddress()
{
    var macaddress = new List();

    // 物理インターフェース情報をすべて取得
    var interfaces = NetworkInterface.GetAllNetworkInterfaces();

    // 各インターフェースごとの情報を調べる
    foreach (var adapter in interfaces)
    {
        // 有効なインターフェースのみを対象とする
        if (adapter.OperationalStatus != OperationalStatus.Up)
        {
            continue;
        }

        // MACアドレス
        macaddress.Add(adapter.GetPhysicalAddress());
    }

    return macaddress;
}

コンピューター名

コンピューター名は Environment クラス のプロパティから取得できます。

using System;

public string GetLocalMachineName()
{
    return Environment.MachineName;
}

ログインユーザー名

ログインユーザー名 は コンピューター名と同様に Environment クラス のプロパティから取得できます。

using System;

public string GetLocalUserName()
{
    return Environment.UserName;
}