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

델파이 Q&A
Delphi Programming Q&A
[9819] Re:IP HELP API 사용해보신분 계신가요?
civilian [civilian] 1364 읽음    2004-08-24 21:04
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 최종패치 적용한 상태 입니다.
:
:
:   로 하면 결과는 아무 값도 없고..

+ -

관련 글 리스트
9818 IP HELP API 사용해보신분 계신가요? 박진수 1726 2004/08/24
9819     Re:IP HELP API 사용해보신분 계신가요? civilian 1364 2004/08/24
9820         Re:IP HELP API 사용해보신분 계신가요? 박진수 1289 2004/08/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.