C #에서 컴퓨터의 MAC 주소를 얻는 안정적인 방법


131

C #을 사용하여 실행중인 OS에 관계없이 컴퓨터의 MAC 주소를 얻는 방법이 필요합니다. 응용 프로그램은 XP / Vista / Win7 32 및 64 비트 및 해당 OS에서 작동해야하지만 외국어는 기본적으로 작동해야합니다. 많은 C # 명령 및 OS 쿼리가 OS에서 작동하지 않습니다. 어떤 아이디어? "ipconfig / all"의 출력을 긁어 냈지만 출력 형식이 모든 컴퓨터마다 다르기 때문에 이것은 신뢰할 수 없습니다.

감사


7
OS 전반에서 말할 때 다른 Microsoft OS를 의미합니까?
존 웰던

답변:


136

클리너 솔루션

var macAddr = 
    (
        from nic in NetworkInterface.GetAllNetworkInterfaces()
        where nic.OperationalStatus == OperationalStatus.Up
        select nic.GetPhysicalAddress().ToString()
    ).FirstOrDefault();

또는:

String firstMacAddress = NetworkInterface
    .GetAllNetworkInterfaces()
    .Where( nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback )
    .Select( nic => nic.GetPhysicalAddress().ToString() )
    .FirstOrDefault();

44
또는 람다, 그게 당신의 일이라면! return NetworkInterface.GetAllNetworkInterfaces().Where(nic => nic.OperationalStatus == OperationalStatus.Up).Select(nic => nic.GetPhysicalAddress().ToString()).FirstOrDefault();(당신의 것이 아니라면, 당신의 것이되어야합니다.)
GONeale

7
: 간결한 방법은 가장 빠르게 얻을 수 var networks = NetworkInterface.GetAllNetworkInterfaces(); var activeNetworks = networks.Where(ni => ni.OperationalStatus == OperationalStatus.Up && ni.NetworkInterfaceType != NetworkInterfaceType.Loopback); var sortedNetworks = activeNetworks.OrderByDescending(ni => ni.Speed); return sortedNetworks.First().GetPhysicalAddress().ToString();
그레이엄 Laight

1
첫 번째를 선택하는 것이 항상 최선의 방법은 아닙니다. 가장 많이 사용 된 연결 선택 : stackoverflow.com/a/51821927/3667
Ramunas

최적화 참고 사항 : FirstOrDefaultfinal 전에 전화 할 수 Select있습니다. 이렇게하면 실제 주소 만 가져오고 실제로 얻을 수 있도록 직렬화합니다 NetworkInterface. 뒤에 null 확인 (?)을 추가하는 것을 잊지 마십시오 FirstOrDefault.
GregaMohorko

계산하는 빠른 방법은 주어진 조건과 일치하는 모든 네트워크를 평가할 필요가 없으며, 그중 첫 번째 만 있으면됩니다. NetworkInterface .GetAllNetworkInterfaces() .FirstOrDefault(nic => nic.OperationalStatus == OperationalStatus.Up && nic.NetworkInterfaceType != NetworkInterfaceType.Loopback)? .GetPhysicalAddress().ToString();
Alessandro Muzzi

80

첫 번째 운영 네트워크 인터페이스의 MAC 주소를 반환하는 C # 코드가 있습니다. NetworkInterface어셈블리가 다른 운영 체제에서 사용되는 런타임 (예 : Mono)으로 구현 되었다고 가정하면 다른 운영 체제에서도 작동합니다.

새 버전 : 유효한 MAC 주소를 가진 가장 빠른 속도로 NIC를 반환합니다.

/// <summary>
/// Finds the MAC address of the NIC with maximum speed.
/// </summary>
/// <returns>The MAC address.</returns>
private string GetMacAddress()
{
    const int MIN_MAC_ADDR_LENGTH = 12;
    string macAddress = string.Empty;
    long maxSpeed = -1;

    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        log.Debug(
            "Found MAC Address: " + nic.GetPhysicalAddress() +
            " Type: " + nic.NetworkInterfaceType);

        string tempMac = nic.GetPhysicalAddress().ToString();
        if (nic.Speed > maxSpeed &&
            !string.IsNullOrEmpty(tempMac) &&
            tempMac.Length >= MIN_MAC_ADDR_LENGTH)
        {
            log.Debug("New Max Speed = " + nic.Speed + ", MAC: " + tempMac);
            maxSpeed = nic.Speed;
            macAddress = tempMac;
        }
    }

    return macAddress;
}

원본 버전 : 첫 번째 버전 만 반환합니다.

/// <summary>
/// Finds the MAC address of the first operation NIC found.
/// </summary>
/// <returns>The MAC address.</returns>
private string GetMacAddress()
{
    string macAddresses = string.Empty;

    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (nic.OperationalStatus == OperationalStatus.Up)
        {
            macAddresses += nic.GetPhysicalAddress().ToString();
            break;
        }
    }

    return macAddresses;
}

Nortel Packet Miniport 또는 VPN 연결 유형이 마음에 든다면 선택 가능성이 있습니다. 내가 알 수있는 한 실제 물리적 장치의 MAC을 어떤 유형의 가상 네트워크 인터페이스와 구별 할 수있는 방법이 없습니다.


6
첫 번째 운영 인터페이스 만 선택하지 마십시오. 루프백 인터페이스, 가끔 연결되는 3G 카드 등을 반환 할 수 있습니다. NetworkInterfaceType ( msdn.microsoft.com/en-us/library/… )은 NetworkInterface 연결에 대한 자세한 정보를 제공하므로보다 정통한 선택을 할 수 있습니다. 또한 컴퓨터에 많은 활성 연결이있을 수 있으며 순서를 예측할 수 없을 수도 있습니다.
Dave R.

@DaveR. 나는 NetworkInterfaceType을 보았는데, 기본적으로 내 경험에 가상 어댑터 일지라도 거의 항상 이더넷을 반환하므로 꽤 쓸모가 없다는 것을 알았습니다.
blak3r

1
GatewayMetric이 가장 낮은 인터페이스를 선택해야합니다. "가장 빠르거나 가장 안정적이거나 리소스 집약적 인 경로"가있는 연결이어야합니다. 기본적으로 Windows가 선호하는 인터페이스를 제공합니다. 그러나 실제로 그것을 얻으려면 WMI가 필요하다고 생각합니다. 내가 그것을 작동시킬 수 있는지 알 수 있습니다 ...
AVee

6
완벽을 기하기 위해 NetworkInterface 클래스는using System.Net.NetworkInformation;
iancoleman

1
기가비트 NIC와 Hyper-V가 설치되어 있으면 10 기가비트 가상 NIC도 있습니다. :) 해결하기 어려운 문제 ...
Christopher Painter

10

Win32_NetworkAdapterConfiguration WMI 클래스MACAddress 속성은 어댑터의 MAC 주소를 제공 할 수 있습니다. (System.Management 네임 스페이스)

MACAddress

    Data type: string
    Access type: Read-only

    Media Access Control (MAC) address of the network adapter. A MAC address is assigned by the manufacturer to uniquely identify the network adapter.

    Example: "00:80:C7:8F:6C:96"

WMI API (Windows Management Instrumentation)에 익숙하지 않은 경우 .NET 앱에 대한 좋은 개요가 있습니다 .

WMI는 .Net 런타임으로 모든 버전의 창에서 사용할 수 있습니다.

코드 예제는 다음과 같습니다.

System.Management.ManagementClass mc = default(System.Management.ManagementClass);
ManagementObject mo = default(ManagementObject);
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");

ManagementObjectCollection moc = mc.GetInstances();
    foreach (var mo in moc) {
        if (mo.Item("IPEnabled") == true) {
              Adapter.Items.Add("MAC " + mo.Item("MacAddress").ToString());
         }
     }

9

WMI는 연결하는 시스템이 Windows 시스템 인 경우 가장 좋은 솔루션이지만 Linux, mac 또는 기타 유형의 네트워크 어댑터를보고있는 경우 다른 것을 사용해야합니다. 몇 가지 옵션이 있습니다.

  1. DOS 명령 nbtstat -a를 사용하십시오. 프로세스를 작성하고이 명령을 호출하여 출력을 구문 분석하십시오.
  2. 먼저 IP를 Ping하여 NIC가 ARP 테이블에 명령을 캐시하는지 확인한 다음 DOS 명령 arp -a를 사용하십시오. 옵션 1과 같이 프로세스 출력을 구문 분석하십시오.
  3. iphlpapi.dll에서 무서운 관리되지 않는 호출을 사용하여 sendarp

다음은 항목 # 3의 샘플입니다. WMI가 실행 가능한 솔루션이 아닌 경우 이것이 가장 좋은 옵션 인 것 같습니다.

using System.Runtime.InteropServices;
...
[DllImport("iphlpapi.dll", ExactSpelling = true)]
        public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);
...
private string GetMacUsingARP(string IPAddr)
{
    IPAddress IP = IPAddress.Parse(IPAddr);
    byte[] macAddr = new byte[6];
    uint macAddrLen = (uint)macAddr.Length;

    if (SendARP((int)IP.Address, 0, macAddr, ref macAddrLen) != 0)
        throw new Exception("ARP command failed");

    string[] str = new string[(int)macAddrLen];
    for (int i = 0; i < macAddrLen; i++)
        str[i] = macAddr[i].ToString("x2");

    return string.Join(":", str);
}

마감일을 밝히기 위해 해당 코드의 기초는 다음과 같습니다. http://www.pinvoke.net/default.aspx/iphlpapi.sendarp#


나는 OP와 같은 것을 찾고 있었고 이것이 내가 필요한 정확한 것입니다!
QueueHammer

옵션 1과 2에서 Windows 시스템에 있고 DOS 또는 Linux 또는 Mac에 해당하는 명령이라면 DOS 명령을 의미합니까?
Raikol Amaro

8

WMI를 사용하여 메트릭이 가장 낮은 인터페이스의 mac 주소를 가져옵니다. 예를 들어 인터페이스 창은 다음과 같이 선호합니다.

public static string GetMACAddress()
{
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
    IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
    string mac = (from o in objects orderby o["IPConnectionMetric"] select o["MACAddress"].ToString()).FirstOrDefault();
    return mac;
}

또는 Silverlight (신뢰가 필요) :

public static string GetMACAddress()
{
    string mac = null;
    if ((Application.Current.IsRunningOutOfBrowser) && (Application.Current.HasElevatedPermissions) && (AutomationFactory.IsAvailable))
    {
        dynamic sWbemLocator = AutomationFactory.CreateObject("WbemScripting.SWBemLocator");
        dynamic sWbemServices = sWbemLocator.ConnectServer(".");
        sWbemServices.Security_.ImpersonationLevel = 3; //impersonate

        string query = "SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true";
        dynamic results = sWbemServices.ExecQuery(query);

        int mtu = int.MaxValue;
        foreach (dynamic result in results)
        {
            if (result.IPConnectionMetric < mtu)
            {
                mtu = result.IPConnectionMetric;
                mac = result.MACAddress;
            }
        }
    }
    return mac;
}

7
public static PhysicalAddress GetMacAddress()
{
    var myInterfaceAddress = NetworkInterface.GetAllNetworkInterfaces()
        .Where(n => n.OperationalStatus == OperationalStatus.Up && n.NetworkInterfaceType != NetworkInterfaceType.Loopback)
        .OrderByDescending(n => n.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
        .Select(n => n.GetPhysicalAddress())
        .FirstOrDefault();

    return myInterfaceAddress;
}

이 코드를 실행하면 응용 프로그램을 실행하는 사람의 주소가 표시됩니까? 이것이 호스팅되는 서버 IP 주소를 얻지 못한다는 것을 의미합니까?
네이트 애완 동물

호스트 시스템 인 서버의 MAC 주소를 가져옵니다.
Tony

6

첫 번째 mac 주소를 반환하는 IMHO는 특히 가상 컴퓨터가 호스팅되는 경우 좋지 않습니다. 따라서 보내기 / 받기 바이트 합계를 확인하고 가장 많이 사용되는 연결을 선택하십시오. 완벽하지는 않지만 9/10 번 정확해야합니다.

public string GetDefaultMacAddress()
{
    Dictionary<string, long> macAddresses = new Dictionary<string, long>();
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
    {
        if (nic.OperationalStatus == OperationalStatus.Up)
            macAddresses[nic.GetPhysicalAddress().ToString()] = nic.GetIPStatistics().BytesSent + nic.GetIPStatistics().BytesReceived;
    }
    long maxValue = 0;
    string mac = "";
    foreach(KeyValuePair<string, long> pair in macAddresses)
    {
        if (pair.Value > maxValue)
        {
            mac = pair.Key;
            maxValue = pair.Value;
        }
    }
    return mac;
}

6

이 방법은 지정된 URL 및 포트에 연결하는 데 사용되는 네트워크 인터페이스의 MAC 주소를 결정합니다.

여기에있는 모든 답변은이 목표를 달성 할 수 없습니다.

나는 몇 년 전에 (2014 년)이 답변을 썼습니다. 그래서 나는 약간의 "얼굴 리프트"를 주기로 결정했습니다. 업데이트 섹션을 참조하십시오

    /// <summary>
    /// Get the MAC of the Netowrk Interface used to connect to the specified url.
    /// </summary>
    /// <param name="allowedURL">URL to connect to.</param>
    /// <param name="port">The port to use. Default is 80.</param>
    /// <returns></returns>
    private static PhysicalAddress GetCurrentMAC(string allowedURL, int port = 80)
    {
        //create tcp client
        var client = new TcpClient();

        //start connection
        client.Client.Connect(new IPEndPoint(Dns.GetHostAddresses(allowedURL)[0], port));

        //wai while connection is established
        while(!client.Connected)
        {
            Thread.Sleep(500);
        }

        //get the ip address from the connected endpoint
        var ipAddress = ((IPEndPoint)client.Client.LocalEndPoint).Address;

        //if the ip is ipv4 mapped to ipv6 then convert to ipv4
        if(ipAddress.IsIPv4MappedToIPv6)
            ipAddress = ipAddress.MapToIPv4();        

        Debug.WriteLine(ipAddress);

        //disconnect the client and free the socket
        client.Client.Disconnect(false);
        
        //this will dispose the client and close the connection if needed
        client.Close();

        var allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

        //return early if no network interfaces found
        if(!(allNetworkInterfaces?.Length > 0))
            return null;

        foreach(var networkInterface in allNetworkInterfaces)
        {
            //get the unicast address of the network interface
            var unicastAddresses = networkInterface.GetIPProperties().UnicastAddresses;
           
            //skip if no unicast address found
            if(!(unicastAddresses?.Count > 0))
                continue;

            //compare the unicast addresses to see 
            //if any match the ip address used to connect over the network
            for(var i = 0; i < unicastAddresses.Count; i++)
            {
                var unicastAddress = unicastAddresses[i];

                //this is unlikely but if it is null just skip
                if(unicastAddress.Address == null)
                    continue;
                
                var ipAddressToCompare = unicastAddress.Address;

                Debug.WriteLine(ipAddressToCompare);

                //if the ip is ipv4 mapped to ipv6 then convert to ipv4
                if(ipAddressToCompare.IsIPv4MappedToIPv6)
                    ipAddressToCompare = ipAddressToCompare.MapToIPv4();

                Debug.WriteLine(ipAddressToCompare);

                //skip if the ip does not match
                if(!ipAddressToCompare.Equals(ipAddress))
                    continue;

                //return the mac address if the ip matches
                return networkInterface.GetPhysicalAddress();
            }
              
        }

        //not found so return null
        return null;
    }

이를 호출하려면 다음과 같이 연결하기 위해 URL을 전달해야합니다.

var mac = GetCurrentMAC("www.google.com");

포트 번호를 지정할 수도 있습니다. 지정하지 않으면 기본값은 80입니다.

업데이트 :

2020

  • 코드를 설명하는 주석이 추가되었습니다.
  • IPV6에 매핑 된 IPV4 (예 : Windows 10)를 사용하는 최신 운영 체제에서 사용하도록 수정되었습니다.
  • 중첩 감소.
  • 코드 "var"을 업그레이드했습니다.

1
이것은 매우 흥미 롭습니다. 내 경우에는 클라이언트가 a) 내 서버와 통신하는 데 사용 된 소스 주소 (인터넷을 통해 반드시 있지는 않음)와 b) MAC 주소 이 IP 주소를 제공하는 NIC입니다.
Brian B

5

NIC ID로 갈 수 있습니다.

 foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
     if (nic.OperationalStatus == OperationalStatus.Up){
         if (nic.Id == "yay!")
     }
 }

MAC 주소는 아니지만 원하는 경우 고유 식별자입니다.


2

IP 연결 메트릭이 가장 낮은 AVee 솔루션을 정말 좋아합니다! 그러나 동일한 메트릭을 가진 두 번째 nic을 설치하면 MAC 비교가 실패 할 수 있습니다.

MAC과의 인터페이스 설명을 더 잘 저장하십시오. 나중에 비교할 때이 문자열로 올바른 닉을 식별 할 수 있습니다. 다음은 샘플 코드입니다.

   public static string GetMacAndDescription()
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
        IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
        string mac = (from o in objects orderby o["IPConnectionMetric"] select o["MACAddress"].ToString()).FirstOrDefault();
        string description = (from o in objects orderby o["IPConnectionMetric"] select o["Description"].ToString()).FirstOrDefault();
        return mac + ";" + description;
    }

    public static string GetMacByDescription( string description)
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true");
        IEnumerable<ManagementObject> objects = searcher.Get().Cast<ManagementObject>();
        string mac = (from o in objects where o["Description"].ToString() == description select o["MACAddress"].ToString()).FirstOrDefault();
        return mac;
    }

2

로컬 IP 192.168.0.182를 사용하는 TcpConnection이 있다고 가정 해 봅시다. 그런 다음 해당 NIC의 mac 주소를 알고 싶다면 meothod를 다음과 같이 호출합니다.GetMacAddressUsedByIp("192.168.0.182")

public static string GetMacAddressUsedByIp(string ipAddress)
    {
        var ips = new List<string>();
        string output;

        try
        {
            // Start the child process.
            Process p = new Process();
            // Redirect the output stream of the child process.
            p.StartInfo.UseShellExecute = false;

            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.FileName = "ipconfig";
            p.StartInfo.Arguments = "/all";
            p.Start();
            // Do not wait for the child process to exit before
            // reading to the end of its redirected stream.
            // p.WaitForExit();
            // Read the output stream first and then wait.
            output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();

        }
        catch
        {
            return null;
        }

        // pattern to get all connections
        var pattern = @"(?xis) 
(?<Header>
     (\r|\n) [^\r]+ :  \r\n\r\n
)
(?<content>
    .+? (?= ( (\r\n\r\n)|($)) )
)";

        List<Match> matches = new List<Match>();

        foreach (Match m in Regex.Matches(output, pattern))
            matches.Add(m);

        var connection = matches.Select(m => new
        {
            containsIp = m.Value.Contains(ipAddress),
            containsPhysicalAddress = Regex.Match(m.Value, @"(?ix)Physical \s Address").Success,
            content = m.Value
        }).Where(x => x.containsIp && x.containsPhysicalAddress)
        .Select(m => Regex.Match(m.content, @"(?ix)  Physical \s address [^:]+ : \s* (?<Mac>[^\s]+)").Groups["Mac"].Value).FirstOrDefault();

        return connection;
    }

이것은 효율적이지 않습니다 ... 나는 이것을하지 않는 것이 좋습니다.
Ivandro IG Jao

2

이 오래된 게시물을 파는 것이 정말 싫어하지만 질문에 Windows 8-10에 대한 또 다른 대답이 필요하다고 생각합니다.

Windows.Networking.Connectivity 네임 스페이스 에서 NetworkInformation 을 사용하면 사용 중인 네트워크 어댑터 창의 ID를 얻을 수 있습니다. 그런 다음 앞에서 언급 한 GetAllNetworkInterfaces ()에서 인터페이스 MAC 주소를 얻을 수 있습니다.

System.Net.NetworkInformation의 NetworkInterface 가 GetAllNetworkInterfaces를 노출하지 않으므로 Windows 스토어 앱에서는 작동 하지 않습니다.

string GetMacAddress()
{
    var connectionProfile = NetworkInformation.GetInternetConnectionProfile();
    if (connectionProfile == null) return "";

    var inUseId = connectionProfile.NetworkAdapter.NetworkAdapterId.ToString("B").ToUpperInvariant();
    if(string.IsNullOrWhiteSpace(inUseId)) return "";

    var mac = NetworkInterface.GetAllNetworkInterfaces()
        .Where(n => inUseId == n.Id)
        .Select(n => n.GetPhysicalAddress().GetAddressBytes().Select(b=>b.ToString("X2")))
        .Select(macBytes => string.Join(" ", macBytes))
        .FirstOrDefault();

    return mac;
}

2
string mac = "";
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {

                if (nic.OperationalStatus == OperationalStatus.Up && (!nic.Description.Contains("Virtual") && !nic.Description.Contains("Pseudo")))
                {
                    if (nic.GetPhysicalAddress().ToString() != "")
                    {
                        mac = nic.GetPhysicalAddress().ToString();
                    }
                }
            }
MessageBox.Show(mac);

2
이 답변은 코드의 기능과 문제를 해결하는 방법에 대한 간략한 설명으로 향상 될 수 있습니다.
Greg Increulous

1

blak3r의 코드를 약간 변경했습니다. 속도가 같은 두 개의 어댑터가있는 경우. MAC을 기준으로 정렬하므로 항상 같은 값을 얻을 수 있습니다.

public string GetMacAddress()
{
    const int MIN_MAC_ADDR_LENGTH = 12;
    string macAddress = string.Empty;
    Dictionary<string, long> macPlusSpeed = new Dictionary<string, long>();
    try
    {
        foreach(NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            System.Diagnostics.Debug.WriteLine("Found MAC Address: " + nic.GetPhysicalAddress() + " Type: " + nic.NetworkInterfaceType);

            string tempMac = nic.GetPhysicalAddress().ToString();

            if(!string.IsNullOrEmpty(tempMac) && tempMac.Length >= MIN_MAC_ADDR_LENGTH)
                macPlusSpeed.Add(tempMac, nic.Speed);
        }

        macAddress = macPlusSpeed.OrderByDescending(row => row.Value).ThenBy(row => row.Key).FirstOrDefault().Key;
    }
    catch{}

    System.Diagnostics.Debug.WriteLine("Fastest MAC address: " + macAddress);

    return macAddress;
}

1
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
     if (nic.OperationalStatus == OperationalStatus.Up)
     {
            PhysicalAddress Mac = nic.GetPhysicalAddress();
     }
}

0

ipconfig.exeiphlpapi.dll... Googling for iphlpapiMSDN은 다양한 Win32 API 를 포함하여 다양한 DLL을 사용하여 구현됩니다 .


0

이 시도:

    /// <summary>
    /// returns the first MAC address from where is executed 
    /// </summary>
    /// <param name="flagUpOnly">if sets returns only the nic on Up status</param>
    /// <returns></returns>
    public static string[] getOperationalMacAddresses(Boolean flagUpOnly)
    {
        string[] macAddresses = new string[NetworkInterface.GetAllNetworkInterfaces().Count()];

        int i = 0;
        foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (nic.OperationalStatus == OperationalStatus.Up || !flagUpOnly)
            {
                macAddresses[i] += ByteToHex(nic.GetPhysicalAddress().GetAddressBytes());
                //break;
                i++;
            }
        }
        return macAddresses;
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.