Delphi中用Socket API实现PING时间:2011-6-2来源:yang 作者: peng点击: 181次
PING无非是向远程主机发送一个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 优先权(现在已经被忽略), 4bits TOS, 最多只能有1bit为1 u16totallen : u16;//整个IP数据报的长度,以字节为单位。 u16id : u16;//标识主机发送的每一份数据报 u16offset : u16;//3bits 标志,13bits片偏移 u8ttl : u8;//生存时间字段设置了数据报可以经过的最多路由器数。 u8protol : u8;//协议类型,6表示传输层是TCP协议。 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; 源码下载 . |
|