[개발] C# - 현재 사용 중인 Lan 의 Mac 주소 알아내기

in mini.topia3 months ago

안녕하세요 @realmankwon 입니다.

요즘 사용하는 컴퓨터에는 랜카드가 2개 이상인 경우가 많습니다.
노트북은 예전부터 유무선 네트워크를 모두 사용하기 때문에 유무선 랜카드가 각각 1개씩 탑재되어 있습니다.
데스크톱의 경우도 예전에는 유선랜카드만 탑재가 되어 있었는데 무선의 속도가 기가 와이파이 시대가 되면서 데스크톱에서도 무선랜 카드를 사용하는 경우가 많이 있습니다.

무선랜을 설치하면 위와같이 배선을 할 필요가 없으니 세상 참 좋아진 것 같습니다.
저도 재택근무를 하면서 인터넷이 느리길래 기가인터넷으로 업그레이드를 했더니 이건 뭐 신세계더군요.
초당 다운로드 속도가 43M 가 나오니...ㅎ

그래서 랜카드를 이용한 개발을 할 때는 여러개의 랜카드 중에 어떤 것이 실제로 사용 중인 랜카드인지를 판별을 해야합니다.
C# 에서 사용중인 랜카드를 알아내는 소스를 작성하였습니다.

1 . 랜카드 리스트 가지고 오기

   String[] networks = NetworkInterface.GetAllNetworkInterfaces();

2 . 랜카드 리스트에서 사용 중인 랜카드 구분하기

foreach(NetworkInterface network in NetworkInterface.GetAllNetworkInterfaces()){
   if(network.OperationalStatus == OperationalStatus.Up)
   {
      String sWlanMacAddr = network.GetPhysicalAddress().ToString();
   }
}

위와 같이 NetworkInterface 변수에 OperationalStatus가 Up 인 것이 현재 사용 중인 랜카드입니다.

OperationalStatus 관련한 MS의 공식 문서는 다음과 같습니다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.net.networkinformation.operationalstatus?view=netcore-3.1

  • OperationalStatus
Attribute Enum Description
Dormant 5 네트워크 인터페이스가 데이터 패킷을 전송하기 위한 상태에 있지 않습니다. 외부 이벤트를 기다리고 있습니다.
Down 2 네트워크 인터페이스에서 데이터 패킷을 전송할 수 없습니다.
LowerLayerDown 7 네트워크 인터페이스가 하나 이상의 다른 인터페이스 위에서 실행되고 있고 "하위 계층" 인터페이스 중 적어도 하나가 작동 중지 상태이기 때문에 데이터 패킷을 전송할 수 없습니다.
NotPresent 6 네트워크 인터페이스의 구성 요소(대개 하드웨어 구성 요소)가 누락되어 데이터 패킷을 전송할 수 없습니다.
Testing 3 네트워크 인터페이스에서 테스트를 실행하고 있습니다.
Unknown 4 네트워크 인터페이스의 상태를 알 수 없습니다.
Up 4 네트워크 인터페이스의 상태를 알 수 없습니다.

이후에 GetPhysicalAddress() 함수를 이용하면 해당 랜카드의 Mac 주소를 얻게됩니다.
그런데 Mac 주소가 일반적으로 보는 모양과 다릅니다.
보통은 ":" 이나 "- "으로 구분자를 사용하여 다음과 같이 표시가 됩니다.

  • AA:BB:CC:DD:EE:FF

하지만 C#에서는 구분자없이 연속으로 표시가 됩니다.

  • AABBCCDDEEFF

그래서 이것을 동일하게 바꿔주기 위해서 다음과 같이 소스를 추가해 보았습니다.

     int i = 0;

     String sMyWlanMacAddr = sWlanMacAddr.Substring(i++, 2);

     for (; i < 6; i++)
     {
           sMyWlanMacAddr  += ":" + sWlanMacAddr.Substring(i * 2, 2);
     }

누군가에게는 도움이 되길 바랍니다.... ^^;;