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

0 件のコメント

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

目次

IPアドレス

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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<ipaddress>();
 
    // 物理インターフェース情報をすべて取得
    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;
}
</ipaddress>

MACアドレス

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
 
public List<physicaladdress> GetLocalPhysicalAddress()
{
    var macaddress = new List<physicaladdress>();
 
    // 物理インターフェース情報をすべて取得
    var interfaces = NetworkInterface.GetAllNetworkInterfaces();
 
    // 各インターフェースごとの情報を調べる
    foreach (var adapter in interfaces)
    {
        // 有効なインターフェースのみを対象とする
        if (adapter.OperationalStatus != OperationalStatus.Up)
        {
            continue;
        }
 
        // MACアドレス
        macaddress.Add(adapter.GetPhysicalAddress());
    }
 
    return macaddress;
}
</physicaladdress></physicaladdress>

コンピューター名

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

1
2
3
4
5
6
using System;
 
public string GetLocalMachineName()
{
    return Environment.MachineName;
}

ログインユーザー名

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

1
2
3
4
5
6
using System;
 
public string GetLocalUserName()
{
    return Environment.UserName;
}

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!