::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-08-12 19:02:05, Hit : 5458, Vote : 1204
 http://www.howto.pe.kr
 IP Helper API 를 이용한 IP 주소 테이블 구하기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  const
    MAX_INTERFACE_NAME_LEN             = $100;
    ERROR_SUCCESS                      = 0;
    MAXLEN_IFDESCR                     = $100;
    MAXLEN_PHYSADDR                    = 8;

    MIB_IPADDR_PRIMARY      = $0001;    //  Primary IP address
    MIB_IPADDR_DYNAMIC      = $0004;    //  Dynamic IP address
    MIB_IPADDR_DISCONNECTED = $0008;    //  Address is on disconnected interface
    MIB_IPADDR_DELETED      = $0040;    //  Address is being deleted
    MIB_IPADDR_TRANSIENT    = $0080;    //  Transient address

  type
    MIB_IPADDRROW = record
      dwAddr      : DWORD;    //  Specifies the IP address
      dwIndex     : DWORD;    //  Specifies the index of the interface
                              //      associated with this IP address
      dwMask      : DWORD;    //  Specifies the subnet mask for the IP address
      dwBCastAddr : DWORD;    //  Specifies the broadcast address. A broadcast
                              //      address is typically the IP address with
                              //      the host portion set to either all zeros
                              //      or all ones
      dwReasmSize : DWORD;    //  Specifies the maximum re-assembly size for
                              //      received datagrams
      unused1     : Word;     //  This member is reserved
      wType       : Word;     //  Specifies the address type or state
    end;

    MIB_IPADDRTABLE = record
      dwNumEntries: DWORD;
      table       : array[0..(MAXLEN_PHYSADDR-1)] of MIB_IPADDRROW;
    end;
    PMIB_IPADDRTABLE = ^MIB_IPADDRTABLE;

  function GetIpAddrTable(pIpAddrTable: Pointer; var pdwSize: LongInt;
                          bOrder: LongInt): LongInt;  stdcall;

  function GetIpAddrTable; stdcall; external 'IPHLPAPI.DLL';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  d: Integer;
  IpAddrTable: PMIB_IPADDRTABLE;
  i: integer;
  Buf: string;
  Addr: TInAddr;
begin
  d := 0;
  GetIpAddrTable(nil, d, 0);

  IpAddrTable := SysGetMem(d);

  if Assigned(IpAddrTable) then
  begin
    if GetIpAddrTable(IpAddrTable, d, 0) = NO_ERROR then
    begin
      for i := 0 to IpAddrTable.dwNumEntries - 1 do
      begin
        Memo1.Lines.Add('');

        Buf := Format('dwIndex     0x%8.8x', [IpAddrTable.table[i].dwIndex]);
        Memo1.Lines.Add(Buf);

        Addr.S_addr := IpAddrTable.table[i].dwAddr;
        Buf := Format('dwAddr      %s', [inet_ntoa(Addr)]);
        Memo1.Lines.Add(Buf);

        Addr.S_addr := IpAddrTable.table[i].dwMask;
        Buf := Format('dwMask      %s', [inet_ntoa(Addr)]);
        Memo1.Lines.Add(Buf);

        Addr.S_addr := IpAddrTable.table[i].dwBCastAddr;
        Buf := Format('dwBCastAddr %s', [inet_ntoa(Addr)]);
        Memo1.Lines.Add(Buf);

        Buf := Format('dwReasmSize %d', [IpAddrTable.table[i].dwReasmSize]);
        Memo1.Lines.Add(Buf);

        case IpAddrTable.table[i].wType of
        MIB_IPADDR_PRIMARY     : Buf := 'dwType      MIB_IPADDR_PRIMARY';
        MIB_IPADDR_DYNAMIC     : Buf := 'dwType      MIB_IPADDR_DYNAMIC';
        MIB_IPADDR_DISCONNECTED: Buf := 'dwType      MIB_IPADDR_DISCONNECTED';
        MIB_IPADDR_DELETED     : Buf := 'dwType      MIB_IPADDR_DELETED';
        MIB_IPADDR_TRANSIENT   : Buf := 'dwType      MIB_IPADDR_TRANSIENT';
        end;
        Memo1.Lines.Add(Buf);
      end;
    end;

    SysFreeMem(IpAddrTable);
  end;
end;

end.





851   [네트웍/인터넷] IP Helper API 를 이용한 "route PRINT" 명령어  김영대 2004/08/13 6108 1538
850   [네트웍/인터넷] IP Helper API 를 이용한 "ipconfig /all" 구현  김영대 2004/08/13 6064 1506
849   [네트웍/인터넷] IP Helper API 를 이용한 ARP 예제 (MAC->IP 구하기)  김영대 2004/08/12 5364 1255
848   [네트웍/인터넷] 설치된 Network Protocol 목록 구하기 (Winsock2)  김영대 2004/08/12 4827 1295
847   [네트웍/인터넷] Network Packet Capture (Winsock2)  김영대 2004/08/12 5790 1240
846   [네트웍/인터넷] IP Helper API 를 이용한 NIC 통신 상태 구하기  김영대 2004/08/12 5116 1430
  [네트웍/인터넷] IP Helper API 를 이용한 IP 주소 테이블 구하기  김영대 2004/08/12 5458 1204
844   [네트웍/인터넷] IP Helper API 를 이용한 접속 상태 테이블 구하기  김영대 2004/08/12 5398 1383
843   [일반/컴포넌트] Task bar 에 나타나는 프로그램 아이콘 바꾸기  김영대 2004/08/11 4866 1149
842   [시스템] 디스플레이 어댑터 목록 구하기  김영대 2004/08/11 4421 1173
841   [윈도우즈 API] IE 임시 인터넷 파일 폴더 비우기2  김영대 2004/08/11 4774 1223
840   [시스템] Sleep 중에도 타이머 이벤트 발생시키기  김영대 2004/08/09 5720 1325
839   [일반/컴포넌트] 도넛(Doughnut) 모양의 폼 만들기  김영대 2004/08/09 4298 1064
838   [네트웍/인터넷] Ping 소스  김영대 2004/08/09 6723 1209
837   [일반/컴포넌트] 수식(Expression) 계산기  김영대 2004/08/09 4442 1090
836   [COM/OLE] Shockwave Flash ActiveX 사용하기 예제  김영대 2004/08/09 4868 1306
835   [일반/컴포넌트] 벽에 들러붙는 자석폼 만들기  김영대 2004/08/06 4571 1136
834   [윈도우즈 API] Type Library 목록 구하기  김영대 2004/08/06 4386 1173
833   [일반/컴포넌트] Title bar 에 문자 올리기  김영대 2004/08/06 4571 1223
832   [일반/컴포넌트] Shockwave Flash 가 설치되었는지 검사하고 버전정보 읽어오기  김영대 2004/08/06 5893 1470
831   [일반/컴포넌트] Adobe Acrobat 이 설치되었는지 검사하기  김영대 2004/08/06 4387 1090
830   [시스템] 프로그램 제거(Uninstall) 목록 구하기  김영대 2004/08/05 4769 1244
829   [일반/컴포넌트] TreeView 의 노드를 볼드(Bold)로 강조하기  김영대 2004/08/05 5755 1664
828   [윈도우즈 API] 휴지통이 비어있는지 확인하기  김영대 2004/08/05 4720 1177
827   [일반/컴포넌트] ListView 내용을 파일로 저장하고 불러오기  김영대 2004/08/05 4433 1055
826   [시스템] 윈도우즈 부팅 모드(정상, 안전)  김영대 2004/08/05 4098 1154
825   [일반/컴포넌트] TPanel 로 만든 힌트  김영대 2004/08/05 4385 1088
824   [윈도우즈 API] 세로 타이틀바 만들기  김영대 2004/08/04 4874 1334
823   [일반/컴포넌트] 동적으로 생성한 TLabel 마우스로 이동시키기  김영대 2004/08/04 6256 1845
822   [일반/컴포넌트] RichEdit 에 URL link 만들기  김영대 2004/08/04 5758 1286
821   [일반/컴포넌트] Hex Viewer  김영대 2004/08/04 4209 1060
820   [시스템] 파일의 소유자와 도메인 구하기  김영대 2004/08/04 4078 1140
819   [시스템] 윈도우즈 사용자 계정 정보 구하기  김영대 2004/08/03 5102 1308
818   [시스템] 윈도우즈 화면 잠그기  김영대 2004/08/03 5047 1283
817   [시스템] DOS 명령어 실행하고 결과 받아오기 (Win2k,XP)  김영대 2004/08/03 5596 1334
816   [시스템] 일정시간 경과 후 윈도우즈 종료하기  김영대 2004/08/03 4488 1097
815   [일반/컴포넌트] Zlib 를 이용한 압축과 해제  김영대 2004/08/03 5238 1199
814   [일반/컴포넌트] Search and Select  김영대 2004/08/03 5147 1346
813   [시스템] DOS (명령 프롬프트) 창의 색상, 화면 모드 바꾸기  김영대 2004/08/02 5417 1591
812   [시스템] 외부 프로그램 종료 시키기  김영대 2004/08/02 5843 1186

[1][2][3] 4 [5][6][7][8][9][10]..[25] [다음 10개]
 

Copyright 1999-2019 Zeroboard / skin by zero