Delphi中用Socket API實現(xiàn)PING時間:2011-6-2來源:yang 作者: peng點擊: 181次
PING無非是向遠程主機發(fā)送一個ICMP包,如果給定時間內沒有接收到回應就認為是超時,如果收到回應則分析接收到的ICMP包,得到TTL、類型以及用時。
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)先權(現(xiàn)在已經被忽略), 4bits TOS, 最多只能有1bit為1 u16totallen : u16;//整個IP數據報的長度,以字節(jié)為單位。 u16id : u16;//標識主機發(fā)送的每一份數據報 u16offset : u16;//3bits 標志,13bits片偏移 u8ttl : u8;//生存時間字段設置了數據報可以經過的最多路由器數。 u8protol : u8;//協(xié)議類型,6表示傳輸層是TCP協(xié)議。 u16checksum : u16;//首部檢驗和 u32srcaddr : u32;//源IP地址,不是‘xxx.xxx.xxx.xxx’的形勢哦 u32destaddr : u32;//目的IP地址,同上 end; // //ICMP Packet Header // PICMPHeader = ^YICMPHeader; YICMPHeader = record u8type : u8; u8code : u8; u16chksum : u16; u16id : u16; u16seq : u16; end; 源碼下載 . |
|
|