Q&A

  • Mac 어드레스를 얻는 방법좀 알려주세요

ipconfig /all
하면 나오는 여러가지 정보들..

특히 맥 어드레스를 얻는 방법좀 알려주십시요..

3  COMMENTS
  • Profile
    양상훈 2002.08.18 18:22
    Torry 홈피에 있는 팁입니다.

    uses NB30;

    function GetMACAdress: string;
    var
      NCB: PNCB;
      Adapter: PAdapterStatus;
      RetCode: char;
      I: integer;
      Lenum: PlanaEnum;
      _SystemID: string;
    begin
      Result    := '';
      _SystemID := '';
      Getmem(NCB, SizeOf(TNCB));
      Fillchar(NCB^, SizeOf(TNCB), 0);

      Getmem(Lenum, SizeOf(TLanaEnum));
      Fillchar(Lenum^, SizeOf(TLanaEnum), 0);

      Getmem(Adapter, SizeOf(TAdapterStatus));
      Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);

      Lenum.Length    := chr(0);
      NCB.ncb_command := chr(NCBENUM);
      NCB.ncb_buffer  := Pointer(Lenum);
      NCB.ncb_length  := SizeOf(Lenum);
      Netbios(NCB);

      i := 0;
      repeat
        Fillchar(NCB^, SizeOf(TNCB), 0);
        Ncb.ncb_command  := chr(NCBRESET);
        Ncb.ncb_lana_num := lenum.lana[I];
        Netbios(Ncb);

        Fillchar(NCB^, SizeOf(TNCB), 0);
        Ncb.ncb_command  := chr(NCBASTAT);
        Ncb.ncb_lana_num := lenum.lana[I];
        // Must be 16
        Ncb.ncb_callname := '*               ';

        Ncb.ncb_buffer := Pointer(Adapter);

        Ncb.ncb_length := SizeOf(TAdapterStatus);
        RetCode        := Netbios(Ncb);
        //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
        if (RetCode = chr(0)) or (RetCode = chr(6)) then
        begin
          _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
            IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
            IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
            IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
            IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
            IntToHex(Ord(Adapter.adapter_address[5]), 2);
        end;
        Inc(i);
      until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
      FreeMem(NCB);
      FreeMem(Adapter);
      FreeMem(Lenum);
      GetMacAdress := _SystemID;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       label1.Caption := GetMACAdress;
    end;
  • Profile
    임승범 2002.12.13 22:39
    결과값이 틀리내요...
    제 PC에서 ipconfig / all 로 본 바로는

      00-E0-29-8D-5D-B7

    인데요. 님이 주신 소스로 돌려보면

      D8-60-20-52-41-53

    로 나오는...

    (_ _;) '아쉽'

  • Profile
    이경문 2002.08.18 12:49
    제가 찾아본 봐로는 관련 API가 없는 것으로 알고 있습니다.
    더우기 랜카드가 여러장 설치되어 있을 때는 각각에 대해서 나오구...
    무식한 방법인데
    DOS Command상의 실행결과(text)를 pipe를 이용해서 얻어낼 수가 있습니다.
    자료실에 RunDosCommand로 조회해 보면 나올 겁니다.