C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[25555] MAC 어드레스 관련 질문입니다.
푸른소 [bluesory] 838 읽음    2003-05-12 17:43
mac 어드레스를 구하고 싶어서, snmp에 관한 것을 찾아서,
여러 고수님들이 올려주신 소스대로 실행해봤는데, 안되더라고요.
올려놓으신 원래 실행파일은 mac 어드레스 값이 제대로 구해지는데,
소스를 다시 컴파일해서 실행해보면, 값이 안나옵니다.
그냥 단순하게 버튼하나 누르면, mac 어드레스 값을 라벨에 나타내주는 걸 하는데,
제가 워낙 초보라서인지.. 잘 안되네요.
에러도 없고 컴파일도 잘되는데 왜 그럴까요?

여기서 받은 소스를 다시한번 올립니다.
여러 고수님들 도와주세요...

//---------------------------------------------------------------------------

#include <vcl.h>
#include <snmp.h>
#include <dos.h>
#include <stdio.h>

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
String __fastcall TForm1::Unique()
{

typedef BOOL(WINAPI * pSnmpExtensionInit) (
         IN DWORD dwTimeZeroReference,
         OUT HANDLE * hPollForTrapEvent,
         OUT AsnObjectIdentifier * supportedView);

typedef BOOL(WINAPI * pSnmpExtensionTrap) (
         OUT AsnObjectIdentifier * enterprise,
         OUT AsnInteger * genericTrap,
         OUT AsnInteger * specificTrap,
         OUT AsnTimeticks * timeStamp,
         OUT RFC1157VarBindList * variableBindings);

typedef BOOL(WINAPI * pSnmpExtensionQuery) (
         IN BYTE requestType,
         IN OUT RFC1157VarBindList * variableBindings,
         OUT AsnInteger * errorStatus,
         OUT AsnInteger * errorIndex);

typedef BOOL(WINAPI * pSnmpExtensionInitEx) (
         OUT AsnObjectIdentifier * supportedView);


HINSTANCE              m_hInst;
pSnmpExtensionInit     m_Init;
pSnmpExtensionQuery    m_Query;
HANDLE                 PollForTrapEvent;
AsnObjectIdentifier    SupportedView;

UINT OID_ifEntryType[]  = {1, 3, 6, 1, 2, 1, 2, 2, 1, 3};
UINT OID_ifEntryNum[]   = {1, 3, 6, 1, 2, 1, 2, 1};
UINT OID_ipMACEntAddr[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 6};

AsnObjectIdentifier MIB_ifMACEntAddr =
   { sizeof(OID_ipMACEntAddr) / sizeof(UINT), OID_ipMACEntAddr };
AsnObjectIdentifier MIB_ifEntryType =
   {sizeof(OID_ifEntryType) / sizeof(UINT), OID_ifEntryType};
AsnObjectIdentifier MIB_ifEntryNum =
   {sizeof(OID_ifEntryNum) / sizeof(UINT), OID_ifEntryNum};

RFC1157VarBindList          varBindList;
RFC1157VarBind              varBind[2];
AsnInteger                  errorStatus;
AsnInteger                  errorIndex;
AsnObjectIdentifier         MIB_NULL = {0, 0};

int                         ret, dtmp, j = 0;
char                        TempEthernet[18];
String                      MAC_ADDRESS = "";
int                         Count = 0;

String                      stTString;
char                        chTString[255];
struct time                 stTime;

gettime(&stTime);
sprintf(chTString, "%02x%02x%02x%02x", stTime.ti_hour, stTime.ti_min, stTime.ti_sec, stTime.ti_hund);

stTString = chTString;


m_Init   = NULL;
m_Query  = NULL;
m_hInst  = LoadLibrary("inetmib1.dll");
//ShowMessage(m_hInst);
if(m_hInst < (HINSTANCE) HINSTANCE_ERROR) {
   m_hInst = NULL;
   return("ERROR");
}

m_Init   = (pSnmpExtensionInit) GetProcAddress(m_hInst, "SnmpExtensionInit");
m_Query  = (pSnmpExtensionQuery) GetProcAddress(m_hInst, "SnmpExtensionQuery");
m_Init(GetTickCount(), &PollForTrapEvent, &SupportedView);

varBindList.list = varBind;
varBind[0].name = MIB_NULL;
varBind[1].name = MIB_NULL;

varBindList.len = 1;
SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryNum);
ret = m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, &errorIndex);

ShowMessage(IntToStr(varBind[0].value.asnValue.number));

varBindList.len = 2;

SNMP_oidcpy(&varBind[0].name, &MIB_ifEntryType);
SNMP_oidcpy(&varBind[1].name, &MIB_ifMACEntAddr);

do {
   ret = m_Query(ASN_RFC1157_GETNEXTREQUEST, &varBindList, &errorStatus, &errorIndex);
   if(!ret) ret = 1;
       else ret = SNMP_oidncmp(&varBind[0].name, &MIB_ifEntryType, MIB_ifEntryType.idLength);

   if(!ret) {
     j++;
     dtmp = varBind[0].value.asnValue.number;

     if(dtmp == 6) {
       ret = SNMP_oidncmp(&varBind[1].name, &MIB_ifMACEntAddr, MIB_ifMACEntAddr.idLength);

       if((!ret) && (varBind[1].value.asnValue.address.stream != NULL)) {
         if((varBind[1].value.asnValue.address.stream[0] == 0x44) &&
            (varBind[1].value.asnValue.address.stream[1] == 0x45) &&
            (varBind[1].value.asnValue.address.stream[2] == 0x53) &&
            (varBind[1].value.asnValue.address.stream[3] == 0x54) &&
            (varBind[1].value.asnValue.address.stream[4] == 0x00)) {
            continue;
         }

         if((varBind[1].value.asnValue.address.stream[0] == 0x00) &&
            (varBind[1].value.asnValue.address.stream[1] == 0x00) &&
            (varBind[1].value.asnValue.address.stream[2] == 0x00) &&
            (varBind[1].value.asnValue.address.stream[3] == 0x00) &&
            (varBind[1].value.asnValue.address.stream[4] == 0x00) &&
            (varBind[1].value.asnValue.address.stream[5] == 0x00)) {
            continue;
          }

          sprintf(TempEthernet, "%02x%02x%02x%02x%02x%02x",
                  varBind[1].value.asnValue.address.stream[0],
                  varBind[1].value.asnValue.address.stream[1],
                  varBind[1].value.asnValue.address.stream[2],
                  varBind[1].value.asnValue.address.stream[3],
                  varBind[1].value.asnValue.address.stream[4],
                  varBind[1].value.asnValue.address.stream[5]);

          MAC_ADDRESS = (String)TempEthernet;
       }
     }
   }

   if(++ Count > 10) break;
} while(!ret);


FreeLibrary(m_hInst);
SNMP_FreeVarBind(&varBind[0]);
SNMP_FreeVarBind(&varBind[1]);

// return(MAC_ADDRESS + stTString);
   return(MAC_ADDRESS);

}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ShowMessage(Unique());
}
//---------------------------------------------------------------------------



+ -

관련 글 리스트
25555 MAC 어드레스 관련 질문입니다. 푸른소 838 2003/05/12
32467     Re:MAC 어드레스 관련 질문입니다. 최준호.스페로 724 2003/05/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.