分享

Delphi中用Socket API实现PING

 独孤求财 2012-03-21

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;
 源码下载
.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多