Q&A

  • ip가 두 개 잡힐 경우, 내부 ip를 가져오는 방법?
매가패스 오피스넷을 쓰고 있구요,
명령프롬프트에서 ipconfig를 치면 ip가 두 개 나옵니다.
하나는 ADSL 유동 ip이구요,
하나는 내부 ip 입니다.

<팁>강좌에서 찾은 소스는 아래와 같은데요,
내부 IP는 가져오지 못합니다.
어떻게 하면 내부 ip를 가져올 수가 있을까요?

고수님들의 조언 부탁드립니다~~^^




function TForm1.HostToIP(Name: string; var Ip: string): Boolean;
var
  wsdata : TWSAData;
  hostName : array [0..255] of char;
  hostEnt : PHostEnt;
  addr : PChar;
begin
  WSAStartup ($0101, wsdata);
  try
    gethostname (hostName, sizeof (hostName));
    StrPCopy(hostName, Name);
    hostEnt := GetHostByName (hostName);
    if Assigned (hostEnt) then
    if Assigned (hostEnt^.h_addr_list) then begin
      addr := hostEnt^.h_addr_list^;
    if Assigned (addr) then begin
      IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
                    byte (addr [1]), byte (addr [2]), byte (addr [3])]);
    Result := True;
  end
  else
    Result := False;
  end
  else
    Result := False
  else begin
    Result := False;
  end;
  finally
    WSACleanup;
  end
end;
1  COMMENTS
  • Profile
    dolputer 2004.06.03 01:33
    찾아보니 이런거도 나오더군요..
    아이피가 둘다 나오네요..


    procedure GetLocalIpList(aList : TStringList);
    type
       TaPInAddr = array [0..255] of PInAddr;
       PaPInAddr = ^TaPInAddr;
    var
    buff : array [0..63] of char;
    pHEnt : PHostEnt;
    pptr : PaPInAddr;
    WSData : TWSAData;
    i : integer;
    begin
    aList.Clear;
    if WSAStartup($202,WSData) <> 0 then begin
       showmessagefmt('%d',[getlasterror]);
       exit;
    end;
    try
       if GetHostName (buff,sizeof(buff)) <> 0 then begin
         showmessagefmt('%d',[getlasterror]);
         exit;
       end;
       pHEnt := gethostbyname(buff);
       if pHEnt <> nil then begin
         pptr := PaPInAddr(pHEnt^.h_addr_list);
         I := 0;
         while pptr^[I] <> nil do begin
             aList.Add(StrPas(inet_ntoa(pptr^[I]^)));
             Inc(I);
         end;
       end;
    finally
       WSACleanup;
    end;

    end;