첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 네트워크 어댑터 정보 리스트 구하기

----------------------------------------------------------------------------------------------------

using Microsoft.Win32;

using System;

using System.Collections.Generic;

using System.Runtime.InteropServices;

 

#region 네트워크 어댑터 정보 리스트 구하기 - GetNetworkAdapterInformationList()

 

/// <summary>

/// 네트워크 어댑터 정보 리스트 구하기

/// </summary>

/// <returns>네트워크 어댑터 정보 리스트</returns>

public static List<NetworkAdapterInformation> GetNetworkAdapterInformationList()

{

    List<NetworkAdapterInformation> networkAdapterInformationList = new List<NetworkAdapterInformation>();

 

    IntPtr ipAdapterAddressesHandle = new IntPtr();

    uint   ipAdapterAddressesLength = 100;

 

    ipAdapterAddressesHandle = Marshal.AllocHGlobal(100);

 

    uint returnCode = GetAdaptersAddresses(0, 0, (IntPtr)0, ipAdapterAddressesHandle, ref ipAdapterAddressesLength);

 

    if(returnCode == 111)

    {

        Marshal.FreeHGlobal(ipAdapterAddressesHandle);

 

        ipAdapterAddressesHandle = Marshal.AllocHGlobal((int)ipAdapterAddressesLength);

 

        returnCode = GetAdaptersAddresses(0, 0, (IntPtr)0, ipAdapterAddressesHandle, ref ipAdapterAddressesLength);

    }

 

    IPAdapterAddress ipAdapterAddress = new IPAdapterAddress();

 

    IntPtr temporaryIPAdapterAddressesHandle = ipAdapterAddressesHandle;

 

    while(temporaryIPAdapterAddressesHandle != (IntPtr)0)

    {

        Marshal.PtrToStructure(temporaryIPAdapterAddressesHandle, ipAdapterAddress);

 

        string adapterName  = Marshal.PtrToStringAnsi(ipAdapterAddress.AdapterName);

        string friendlyName = Marshal.PtrToStringAuto(ipAdapterAddress.FriendlyName);

        string macAddress   = string.Empty;

                    

        for(int i = 0; i < 6; i++)

        {

            macAddress += string.Format("{0:X2}", ipAdapterAddress.PhysicalAddress[i]);

 

            if(i < 5)

            {

                macAddress += ":";

            }

        }

 

        RegistryKey localMachineRegistryKey = Registry.LocalMachine; 



        RegistryKey interfacesRegistryKey =

            localMachineRegistryKey.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces");


        RegistryKey interfaceRegistryKey = interfacesRegistryKey.OpenSubKey(adapterName);

 

        if(interfaceRegistryKey != null)

        {

            string dhcpIPAddress = interfaceRegistryKey.GetValue("DhcpIPAddress") as string;

 

            if(!string.IsNullOrEmpty(dhcpIPAddress))

            {

                string ipAddress = interfaceRegistryKey.GetValue("DhcpIPAddress", interfaceRegistryKey) as string;

 

                NetworkAdapterInformation networkAdapterInformation = new NetworkAdapterInformation();

 

                networkAdapterInformation.NetworkAdapter = friendlyName.ToString();

                networkAdapterInformation.IPAddress      = ipAddress;

                networkAdapterInformation.MACAddress     = macAddress;

 

                networkAdapterInformationList.Add(networkAdapterInformation);

            }

        }

 

        temporaryIPAdapterAddressesHandle = ipAdapterAddress.Next;

    }

 

    return networkAdapterInformationList;

}

 

#endregion

 

IPAdapterAddress.cs

 

 

using System;

using System.Runtime.InteropServices;

 

/// <summary>

/// IP 어댑터 주소

/// </summary>

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]

public class IPAdapterAddress

{

    /// <summary>

    /// 길이

    /// </summary>

    public uint Length;

 

    /// <summary>

    /// 인덱스

    /// </summary>

    public uint IfIndex;

 

    /// <summary>

    /// 다음 핸들

    /// </summary>

    public IntPtr Next;

 

    /// <summary>

    /// 어댑터 명칭

    /// </summary>

    public IntPtr AdapterName;

 

    /// <summary>

    /// 첫번째 유니 캐스트 주소

    /// </summary>

    public IntPtr FirstUnicastAddress;

 

    /// <summary>

    /// 첫번째 애니 캐스트 주소

    /// </summary>

    public IntPtr FirstAnycastAddress;

 

    /// <summary>

    /// 첫번째 멀티 캐스트 주소

    /// </summary>

    public IntPtr FirstMulticastAddress;

 

    /// <summary>

    /// 첫번째 DNS 서버 주소

    /// </summary>

    public IntPtr FirstDNSServerAddress;

 

    /// <summary>

    /// DNS 접미사

    /// </summary>

    public IntPtr DNSSuffix;

 

    /// <summary>

    /// 설명

    /// </summary>

    public IntPtr Description;

 

    /// <summary>

    /// 프렌들리 명칭

    /// </summary>

    public IntPtr FriendlyName;

 

    /// <summary>

    /// 물리적 주소

    /// </summary>

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]

    public Byte[] PhysicalAddress;

 

    /// <summary>

    /// 물리적 주소 길이

    /// </summary>

    public uint PhysicalAddressLength;

 

    /// <summary>

    /// 플래그

    /// </summary>

    public uint Flags;

 

    /// <summary>

    /// MTU

    /// </summary>

    public uint MTU;

 

    /// <summary>

    /// 타입

    /// </summary>

    public uint IfType;

 

    /// <summary>

    /// 운영 상태

    /// </summary>

    public uint OperationalStatus;

 

    /// <summary>

    /// IPV6 인덱스

    /// </summary>

    public uint IPV6IfIndex;

 

    /// <summary>

    /// 영역 인덱스

    /// </summary>

    public uint ZoneIndices;

 

    /// <summary>

    /// 첫번째 접두사

    /// </summary>

    public IntPtr FirstPrefix;

}

 

 

NetworkAdapterInformation.cs

 

 

/// <summary>

/// 네트워크 어댑터 정보

/// </summary>

public class NetworkAdapterInformation

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Field

    ////////////////////////////////////////////////////////////////////////////////////////// Private

 

    #region Field

 

    /// <summary>

    /// 네트워크 어댑터

    /// </summary>

    private string networkAdapter = string.Empty;

 

    /// <summary>

    /// IP 주소

    /// </summary>

    private string ipAddress = string.Empty;

 

    /// <summary>

    /// MAC 주소

    /// </summary>

    private string macAddress = string.Empty;

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 네트워크 어댑터 - NetworkAdapter

 

    /// <summary>

    /// 네트워크 어댑터

    /// </summary>

    public string NetworkAdapter

    {

        get

        {

            return this.networkAdapter;

        }

        set

        {

            this.networkAdapter = value;

        }

    }

 

    #endregion

 

    #region IP 주소 - IPAddress

 

    /// <summary>

    /// IP 주소

    /// </summary>

    public string IPAddress

    {

        get

        {

            return this.ipAddress;

        }

        set

        {

            this.ipAddress = value;

        }

    }

 

    #endregion

 

    #region MAC 주소 - MACAddress

 

    /// <summary>

    /// MAC 주소

    /// </summary>

    public string MACAddress

    {

        get

        {

            return this.macAddress;

        }

        set

        {

            this.macAddress = value;

        }

    }

 

    #endregion

 

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 생성자 - NetworkAdapterInformation()

 

    /// <summary>

    /// 생성자

    /// </summary>

    public NetworkAdapterInformation()

    {

    }

 

    #endregion

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요