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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[276] 설치된 모든 랜카드의 맥어드레스 얻기
civilian [civilian] 8710 읽음    2010-03-30 17:58
procedure TForm1.Button1Click(Sender: TObject);
var
  NumInterfaces: Cardinal;
  AdapterInfo: array of TIpAdapterInfo;
  OutBufLen: ULONG;
  i: integer;
begin
  GetNumberOfInterfaces(NumInterfaces);
  SetLength(AdapterInfo, NumInterfaces);
  OutBufLen := NumInterfaces * SizeOf(TIpAdapterInfo);
  GetAdaptersInfo(@AdapterInfo[0], OutBufLen);

  Memo1.Lines.Clear;
  for i := 0 to NumInterfaces - 1 do begin
    Memo1.Lines.Add(Format('%.2x:%.2x:%.2x:%.2x:%.2x:%.2x',
      [AdapterInfo[i].Address[0], AdapterInfo[i].Address[1],
       AdapterInfo[i].Address[2], AdapterInfo[i].Address[3],
       AdapterInfo[i].Address[4], AdapterInfo[i].Address[5]]));
  end;
end;


JEDI 유닛 중 IpHlpApi.pa 를 use 해야 함.

출처 : stackoverflow.com
DrK [whitekid]   2010-04-06 17:45 X
JclSysInfo를 이용한 방법도 있어요 ^^;
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, JclSysInfo;

var
  Addresses: TStrings;
begin
  try
    Addresses := TStringList.Create;
    JclSysInfo.GetMacAddresses('', Addresses);
    Writeln(Addresses.Text);
    Addresses.Free;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
DrK [whitekid]   2010-04-06 17:51 X
아.. SendAPR를 이용한 방법도.. 이건 IP 주소를 기반한 건데, 여러 NIC가 있을 경우 특정 NIC의 MAC을 얻을때 좋습니다.

program Project1;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, WinSock, JclSysInfo;

function SendARP(DestIP:ULONG; SrcIP:DWORD; PMacAddr:PULONG; PhyAddrLen:PULONG): DWORD; stdcall;
  external 'iphlpapi.dll' name 'SendARP' delayed;

function GetMacAddress(const IPAddr: AnsiString): string;
var
  DestIP: ULONG;
  MacAddr: array [0..5] of Byte;
  MacAddrLen: ULONG;
begin
  DestIP := inet_addr(PAnsiChar(IPAddr));

  MacAddrLen := Length(MacAddr);
  SendARP(DestIP, 0, @MacAddr, @MacAddrLen);
  Result := Format('%2.2X-%2.2X-%2.2X-%2.2X-%2.2X-%2.2X',
                   [MacAddr[0], MacAddr[1], MacAddr[2],
                    MacAddr[3], MacAddr[4], MacAddr[5]]);
end;

begin
  try
    Writeln(GetMacAddress('192.168.0.1'));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

+ -

관련 글 리스트
276 설치된 모든 랜카드의 맥어드레스 얻기 civilian 8710 2010/03/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.