Delphi中用Socket API實(shí)現(xiàn)PING時(shí)間:2011-6-2來(lái)源:yang 作者: peng點(diǎn)擊: 181次
PING無(wú)非是向遠(yuǎn)程主機(jī)發(fā)送一個(gè)ICMP包,如果給定時(shí)間內(nèi)沒(méi)有接收到回應(yīng)就認(rèn)為是超時(shí),如果收到回應(yīng)則分析接收到的ICMP包,得到TTL、類(lèi)型以及用時(shí)。
unit YRecords; interface uses Windows; const ICMP_ECHO = 8; ICMP_ECHOREPLY = 0; ICMP_MIN = 8; PACKET_SIZE = 32; MAX_PACKET_SIZE = 512; MAX_IP_HDR_SIZE = 60; type s32 = Integer; u32 = DWORD; u8 = Byte; u16 = word; PU16 = ^U16; // //IP Packet Header // PIPHeader = ^YIPHeader; YIPHeader = record u8verlen : u8;//4bits ver, 4bits len, len*4=true length u8tos : u8;//type of service, 3bits 優(yōu)先權(quán)(現(xiàn)在已經(jīng)被忽略), 4bits TOS, 最多只能有1bit為1 u16totallen : u16;//整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)為單位。 u16id : u16;//標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào) u16offset : u16;//3bits 標(biāo)志,13bits片偏移 u8ttl : u8;//生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過(guò)的最多路由器數(shù)。 u8protol : u8;//協(xié)議類(lèi)型,6表示傳輸層是TCP協(xié)議。 u16checksum : u16;//首部檢驗(yàn)和 u32srcaddr : u32;//源IP地址,不是‘xxx.xxx.xxx.xxx’的形勢(shì)哦 u32destaddr : u32;//目的IP地址,同上 end; // //ICMP Packet Header // PICMPHeader = ^YICMPHeader; YICMPHeader = record u8type : u8; u8code : u8; u16chksum : u16; u16id : u16; u16seq : u16; end; 源碼下載 . |
|
來(lái)自: 獨(dú)孤求財(cái) > 《DELPHI》