복수 도메인이나 복수 IP의 경우는 모르겠음..-_-;
uses WinSock;
function GetIPAddressFromDomainName(Host: PChar): String;
var
WSAData1: WSADATA;
HostEnt: PHostEnt;
pAddr: PChar;
addr: in_addr;
begin
Result:='';
var
WSAData1: WSADATA;
HostEnt: PHostEnt;
pAddr: PChar;
addr: in_addr;
begin
Result:='';
// GetHostByName 을 쓰기 위해 WSAStartup 을 한번 해줘야 함
if WSAStartup(MAKEWORD(2, 2), WSAData1)<>0 then Exit;
if WSAStartup(MAKEWORD(2, 2), WSAData1)<>0 then Exit;
// WSAStartup 호출이 제대로 되지 않음을 체크(?)
if (LOBYTE(WSAData1.wVersion)<>2) or (HIBYTE(WSAData1.wVersion)<>2) then begin
WSACleanup;
Exit;
end;
if (LOBYTE(WSAData1.wVersion)<>2) or (HIBYTE(WSAData1.wVersion)<>2) then begin
WSACleanup;
Exit;
end;
// HostEnt 로 매개변수로 받아온 도메인이름의 정보를 받아옴
HostEnt := GetHostByName(Host);
if HostEnt=nil then Exit;
if HostEnt=nil then Exit;
// PChar 형 변수로 ip 주소를 옮김
pAddr := HostEnt^.h_addr_list^;
if pAddr=nil then Exit;
pAddr := HostEnt^.h_addr_list^;
if pAddr=nil then Exit;
// 옮긴 ip 주소를 in_addr 로 적절히 변환
addr.S_un_b.s_b1 := pAddr[0];
addr.S_un_b.s_b2 := pAddr[1];
addr.S_un_b.s_b3 := pAddr[2];
addr.S_un_b.s_b4 := pAddr[3];
addr.S_un_b.s_b1 := pAddr[0];
addr.S_un_b.s_b2 := pAddr[1];
addr.S_un_b.s_b3 := pAddr[2];
addr.S_un_b.s_b4 := pAddr[3];
// 변환된 ip 주소를 반환
Result := inet_ntoa(addr);
end;
Result := inet_ntoa(addr);
end;
'Delphi' 카테고리의 다른 글
[Delphi] 절대 죽지 않는 불사신 어플리케이션 제작법 (0) | 2009.04.18 |
---|---|
TStringList, THashedStringList 의 IndexOf 속도차이에 대해서 (0) | 2009.04.18 |
[Delphi] THashStringList (대용량 문자열 저장/검색) (0) | 2009.04.18 |
예외 (Exception) 모음 (0) | 2009.04.18 |
ReportMemoryLeaksOnShutdown:=True 사용시 Indy의 어쩔 수 없는 메모리 누수 출력안하기 (0) | 2009.04.18 |