말그대로 입니다.
물론 인디를 써도 됩니다. 근데. 웬지 말들고 싶어서 짜집기 해서 맹글어 봤습니다.
출처는 이곳 저곳에서 짜집기 한것으로 꽤 오래전에 만든거라.. ㅜ.ㅜ 죄송 합니다.
거두 절미하고 바로 소스 나갑니다. 참고 되시기 바랍니다.
델마당의 경우 Ping(WWW2IP(‘www.delmadang.com’),1000) 로 하면.. 약 0.094~0.15 초정도..
Uses 문에 Winsock을 포함하시고요.
Const // 선언하시고요.. IP_STATUS_BASE = 11000; IP_SUCCESS = 0; IP_BUF_TOO_SMALL = IP_STATUS_BASE + 1; IP_DEST_NET_UNREACHABLE = IP_STATUS_BASE + 2; IP_DEST_HOST_UNREACHABLE = IP_STATUS_BASE + 3; IP_DEST_PROT_UNREACHABLE = IP_STATUS_BASE + 4; IP_DEST_PORT_UNREACHABLE = IP_STATUS_BASE + 5; IP_NO_RESOURCES = IP_STATUS_BASE + 6; IP_BAD_OPTION = IP_STATUS_BASE + 7; IP_HW_ERROR = IP_STATUS_BASE + 8; IP_PACKET_TOO_BIG = IP_STATUS_BASE + 9; IP_REQ_TIMED_OUT = IP_STATUS_BASE + 10; IP_BAD_REQ = IP_STATUS_BASE + 11; IP_BAD_ROUTE = IP_STATUS_BASE + 12; IP_TTL_EXPIRED_TRANSIT = IP_STATUS_BASE + 13; IP_TTL_EXPIRED_REASSEM = IP_STATUS_BASE + 14; IP_PARAM_PROBLEM = IP_STATUS_BASE + 15; IP_SOURCE_QUENCH = IP_STATUS_BASE + 16; IP_OPTION_TOO_BIG = IP_STATUS_BASE + 17; IP_BAD_DESTINATION = IP_STATUS_BASE + 18; IP_ADDR_DELETED = IP_STATUS_BASE + 19; IP_SPEC_MTU_CHANGE = IP_STATUS_BASE + 20; IP_MTU_CHANGE = IP_STATUS_BASE + 21; IP_UNLOAD = IP_STATUS_BASE + 22; IP_GENERAL_FAILURE = IP_STATUS_BASE + 50; MAX_IP_STATUS = IP_GENERAL_FAILURE; IP_PENDING = IP_STATUS_BASE + 255; Type IPINFO = Record Ttl: Char; // Time To Live Tos: Char; // Type Of Service IPFlags: Char; // IP flags OptSize: Char; // Size of options data Options: pChar; // Options data buffer end; ICMPECHO = Record Source: ULONG; // Source address Status: ULONG; // IP status RTTime: ULONG; // Round trip time in milliseconds DataSize: SHORT; // Reply data size Reserved: SHORT; // Unknown pData : pChar; // Reply data buffer IPINFO: IPINFO; // Reply options end; // DLL 정의 안되있으므로 정의 하시고요.. function IcmpCreateFile: THandle; stdcall; external 'icmp.dll'; function IcmpCloseHandle(icmpHandle: THandle): boolean; stdcall; external 'icmp.dll'; function IcmpSendEcho(icmpHandle : THandle; DestinationAddress: LongInt; RequestData : Pointer; RequestSize : Smallint; RequestOptions: Pointer; ReplyBuffer : Pointer; ReplySize : DWORD; Timeout : DWORD): DWORD; stdcall; external 'icmp.dll'; // 핑 나갑니다. function Ping(IPAddress: string; msTime: Integer): Integer; var Handle: THandle; DW: DWORD; REP: ICMPECHO; IPLong: LongInt; begin Result := -1; Handle := IcmpCreateFile; if Handle = INVALID_HANDLE_VALUE then Exit; IPLong := inet_addr(pChar(IPAddress)); DW := IcmpSendEcho(Handle, IPLong, nil, 0, nil, @REP, Sizeof(REP), msTime); Result := REP.Status; IcmpCloseHandle(Handle); end; // 도메인 주소를 IP로 변환 합니다. function WWW2IP(strDomainName: string): string; var pHostInfo: pHostEnt; wsaData: TWSAData; function isIP(Host: String): Integer; var sHost: string; is255: boolean; begin Result := -1; is255 := True; if Host = '' then Exit; sHost := Host + '.'; While not(sHost = '') do begin case StrToIntDef(Copy(sHost, 1, Pos('.', sHost) - 1), -1) of 0 .. 255: Result := 1; -1: Result := -1; else is255 := False; end; sHost := Copy(sHost, Pos('.', sHost) + 1, MaxInt); end; if not is255 then Result := 2; end; begin case isIP(strDomainName) of 1: begin Result := strDomainName; Exit; end; 2: begin Result := ''; Exit; end; end; WSAStartup(MAKEWORD(2, 2), wsaData); pHostInfo := GetHostByName(pChar(strDomainName)); if Assigned(pHostInfo) then Result := IntToStr(ord(pHostInfo.h_addr_list^[0])) + '.' + IntToStr(ord(pHostInfo.h_addr_list^[1])) + '.' + IntToStr(ord(pHostInfo.h_addr_list^[2])) + '.' + IntToStr(ord(pHostInfo.h_addr_list^[3])) else Result := ''; WSACleanup(); end;
예제
If Ping(WWW2IP('www.delmadang.com'),1000) = IP_SUCCESS Then 성공...
<<제작/편집/수정 : 김말동 >>
최신 댓글