http://delphi.about.com/library/weekly/aa112903a.htm
이미 알고있는 자료인지는 모르겠으나...
소스코드를 받을 수 있으니 받아서 보시면 도움이 될 듯 하군요.
박진수 님이 쓰신 글 :
: IP HELP API(IPHLPAPI.DLL 에 있음)를 이용하여.
: 랜카드에 대한
: MAC ADDRESS 및 IP ADDRESS, 게이트웨이 어드레스, DHCP 유무의정보를 읽어 오려고 하는데요.
:
: 제가 실수 한게 있는지 잘 되질 않네요.
:
: 일단 소스를 올려놓겠습니다. 테스트 중입니다.
:
: -------------------------------------------------------------------------
:
: const
: MAX_ADAPTER_ADDRESS_LENGTH = 8; // Adapter(랜카드) MAC Address 주소의 최대길이(BYTE 수)
: MAX_ADAPTER_NAME_LENGTH = 256; // Adapter(랜카드) 네임처리를 위한 최대길이(BYTE 수)
: MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // Adapter(랜카드) 설명처리를 위한 최대길이(BYTE 수)
:
: type
: TMacAddress = array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte; // MAC Address 처리를 위한 Type정의
:
: type
: PTIP_ADDRESS_STRING = ^TIP_ADDRESS_STRING; // IP Address 처리를 위한 Type Pointer Type의 정의
: TIP_ADDRESS_STRING = array[0..15] of char; // IP Address 처리를 위한 Type의 정의
:
: type
: PTIP_ADDR_STRING = ^TIP_ADDR_STRING; // IP Address 리스트 Type을 처리위한 구조체 Type에 대한 Pointer Type의 정의
: TIP_ADDR_STRING = packed record // IP Address 리스트 Type을 처리위한 구조체 Type 정의(Linked List)
: Next: PTIP_ADDR_STRING; // 다음 IP Address 정보를 가리키는 Pointer
: IpAddress: TIP_ADDRESS_STRING; // IP Address 주소
: IpMask: TIP_ADDRESS_STRING; // IP Mask 값
: Context: DWORD; // Context ID
: end;
:
: type
: TTIME_T = array[1..325] of byte; // Lease Obtained Time(DHCP서버로 부터 IP를 임대시작한 시간)
: // 또는 Lease Expires Time(DHCP서버로 부터 IP를 임대말료 시간)의 처리를 위한 Type 정의
: PTIP_ADAPTER_INFO = ^TIP_ADAPTER_INFO;
: TIP_ADAPTER_INFO = packed record // Network Adapter 정보 처리를 위한 Type 정의 ipconfig.exe를 실행시 나타내주는 구조와 비슷(Linked List)
: Next: PTIP_ADAPTER_INFO; // 다음 Network Adapter 정보로의 Pointer
: ComboIndex: DWORD; // winipcfg 상태에서의 콤보박스 저장 인덱스
: AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of char; // 어뎁터명
: Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of char; // 어뎁터에 대한 설명
: AddressLength: UINT; // 어드레스의 길이 UNIT = LongWord
: Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte; // 어뎁터의 MAC 어드레스 주소
: Index: DWORD;
: aType: UINT;
: DHCPEnabled: UINT; // DHCP 사용여부
: CurrentIPAddress: PTIP_ADDR_STRING; // 어뎁터의 IP 어드레스 주소
: IPAddressList: TIP_ADDR_STRING; // DNS 서버 IP 리스트
: GatewayList: TIP_ADDR_STRING; // GateWay IP 리스트
: DHCPServer: TIP_ADDR_STRING; // DHCP 서버 IP 리스트
: HaveWINS: BOOL; // WINS 서버 사용여부
: PrimaryWINSServer: TIP_ADDR_STRING; // 주 WINS 서버에 대한 IP 어드레스
: SecondaryWINSServer: TIP_ADDR_STRING; // 보조 WINS 서버에 대한 IP 어드레스
: LeaseObtained: TTIME_T; // Lease Obtained Time(DHCP서버로 부터 IP를 임대시작한 시간) = 회선사용시작시간
: LeaseExpires: TTIME_T; // Lease Expires Time(DHCP서버로 부터 IP를 임대말료 시간) = 회선사용종료시간
: end;
:
: function GetAdaptersInfo(AdapterInfo: PTIP_ADAPTER_INFO; OutBufLen: PULONG): DWORD;
: stdcall; external 'IPHLPAPI.DLL';
:
:
: function GetMacAddress(AdapterID: integer): string;
: var
: Error, BufLen : DWORD;
: AdapterInfo : PTIP_ADAPTER_INFO;
: Descr : string;
: begin
: Result := '';
: BufLen := SizeOf(AdapterInfo^);
: New(AdapterInfo);
: //-----
: Error := GetAdaptersInfo(AdapterInfo, @BufLen);
: if(Error = NO_ERROR) then // 에러가 없다면..,
: begin
: while(AdapterInfo <> nil) do
: begin
: descr := string(AdapterInfo^.Description);
: showmessage(descr);
: AdapterInfo := AdapterInfo^.Next;
: end;
: end
: else Result := SysErrorMessage(Error);
: Dispose(AdapterInfo);
: end;
:
:
: procedure TForm1.Button1Click(Sender: TObject);
: begin
: GetMacAddress(0);
: end;
:
: -------------------------------------------------
:
: 일단 제가 IP_ADAPTER_INFO 에 대한 구조체 내용은 대강 분석해 놨는데요.. 주석기준으로
: 읽어오는 값들중..,
:
: 어뎁터의 이름을 읽어오기위해
: descr := string(AdapterInfo^.AdapterName); 로 하면 결과는 아무 값도 없고..
: 어뎁터의 ip주소를 읽어오기위해
: descr := string(AdapterInfo^.CurrentIPAddress^.IpAddress); 나
: descr := string(AdapterInfo^.IPAddressList.IpAddress); 를 해도 아무런 내용이 없더군요.
:
: 어뎁터 명은 오히려
: descr := string(AdapterInfo^.AdapterName); 대신
: descr := string(AdapterInfo^.Description); 을 사용해야 읽어와 지는데..,
:
: 정확한 제어방법을 아시는 분들의 조언을 구합니다.
:
: -----------------------------------------------
:
: 작업환경은 델파이 7 패치1 적용상태구요.
: win98se ie6.0 sp1 최종패치 적용한 상태 입니다.
:
:
: 로 하면 결과는 아무 값도 없고..