본문 바로가기

SW Engineering/wxWidgets

[wxWidgets] MAC address 정보 가져오기

 

wxWidgets 상에서는 MAC 정보 조회에 대한 library가 현재 없는 상태이다.

해당 기능 추가를 위해서는 OS 별 구현을 해야한다.

아래는 MSW 환경 상에서의 MAC address 조회 코드 이다.

 

 

		typedef struct _ASTAT_ 
		{ 
			ADAPTER_STATUS adapt; 
			NAME_BUFFER	NameBuff [30]; 
		}ASTAT, *PASTAT; 
		
		ASTAT Adapter; 
		
		NCB Ncb; 
		UCHAR uRetCode; 
		LANA_ENUM lenum; 
		int i; 
		
		memset( &Ncb, 0, sizeof(Ncb) ); 
		Ncb.ncb_command = NCBENUM; 
		Ncb.ncb_buffer = (UCHAR *)&lenum; 
		Ncb.ncb_length = sizeof(lenum); 
		uRetCode = Netbios( &Ncb ); 
		wxMessageBox( wxString::Format( _("The NCBENUM return code is: 0x%08x \n"), uRetCode ) ); 
			 
		//	  if (uRetCode == NRC_BADNCB) 
		//		  printf("Bad NCB returned, cannot retrieve adapter information!\n"); 
		
		wxString str = wxEmptyString;
			 
		for (i=0; i < lenum.length ;i++) 
		{ 
			memset( &Ncb, 0, sizeof(Ncb) ); 
			Ncb.ncb_command = NCBRESET; 
			Ncb.ncb_lana_num = lenum.lana[i]; 
		
			uRetCode = Netbios( &Ncb ); 
			wxMessageBox( wxString::Format( _("The NCBRESET on LANA %d return code is: 0x%02x \n"), 
						 lenum.lana[i], uRetCode ) ); 

		 	memset( &Ncb, 0, sizeof (Ncb) ); 
         	Ncb.ncb_command = NCBASTAT; 
         	Ncb.ncb_lana_num = lenum.lana[i]; 

			UCHAR temp[] = "*               ";
         	memcpy( Ncb.ncb_callname,  temp, NCBNAMSZ ); 

         	Ncb.ncb_buffer = (UCHAR *) &Adapter; 
         	Ncb.ncb_length = sizeof(Adapter); 

        	uRetCode = Netbios( &Ncb ); 
         		
			wxMessageBox( wxString::Format( _("The NCBRESET on LANA %d return code is: 0x%02x \n"), 
						lenum.lana[i], uRetCode ) ); 
         		 
			if ( uRetCode == 0 ) 
			{ 
				str = wxString::Format( _("The Eth Num on LANA %d is: %02x-%02x-%02x-%02x-%02x-%02x"), 
						 lenum.lana[i], 
						 Adapter.adapt.adapter_address[0], 
						 Adapter.adapt.adapter_address[1], 
						 Adapter.adapt.adapter_address[2], 
						 Adapter.adapt.adapter_address[3], 
						 Adapter.adapt.adapter_address[4], 
						 Adapter.adapt.adapter_address[5] ); 
		
				wxMessageBox(str);
			} 
		}