civilian 님 좋은 자료 감사 합니다.
civilian 님이 쓰신 글 :
:
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 최종패치 적용한 상태 입니다.
: :
: :
: : 로 하면 결과는 아무 값도 없고..