IpHdr.pas
上传用户:hbtcygglw
上传日期:2007-01-07
资源大小:281k
文件大小:2k
源码类别:

其他

开发平台:

Delphi

  1. unit IpHdr;
  2. interface
  3. uses Windows,WinSock;
  4. type
  5. TIPHdr=record
  6.     ip_verlen:BYTE;
  7.     ip_tos:Byte;
  8.     ip_totallength:Word;
  9.     ip_id:Word;
  10.     ip_offset:Word;
  11.     ip_ttl:Byte;
  12.     ip_protocol:Byte;
  13.     ip_checksum:Word;
  14.     ip_srcaddr:DWORD;
  15.     ip_destaddr:DWORD;
  16.     end;
  17. PIPHdr=^TIPHdr;
  18. TUDPHdr=record
  19.     udp_srcport:Word;
  20.     udp_destport:Word;
  21.     udp_length:Word;
  22.     udp_checksum:Word;
  23.     end;
  24. PUDPHdr=^TUDPHdr;
  25. function inet_checksum(var buf;buflen:Integer):Word;
  26. function LookupName(const name:string;var addr:TInAddr):Boolean;
  27. implementation
  28. function LookupName(const name: string;var addr:TInAddr):Boolean;
  29. var
  30.   HostEnt: PHostEnt;
  31. begin
  32.   Result:=False;
  33.   addr.S_addr:=inet_addr(PChar(name));
  34.   if(addr.S_addr=-1)then
  35.   begin
  36.     HostEnt := gethostbyname(PChar(Name));
  37.     FillChar(Addr, SizeOf(Addr), 0);
  38.     if HostEnt <> nil then
  39.     begin
  40.       with addr, HostEnt^ do
  41.       begin
  42.         S_un_b.s_b1 := h_addr^[0];
  43.         S_un_b.s_b2 := h_addr^[1];
  44.         S_un_b.s_b3 := h_addr^[2];
  45.         S_un_b.s_b4 := h_addr^[3];
  46.       end;
  47.     Result:=True;
  48.     end;
  49.   end
  50.   else Result:=True;
  51. end;
  52. function inet_checksum(var buf;buflen:Integer):Word;
  53. var
  54. pBuf:PWord;
  55. cksum:DWORD;
  56. begin
  57. cksum:=0;
  58. pBuf:=PWord(buf);
  59. while(buflen>1)do
  60.     begin
  61.     cksum:=cksum+pBuf^;
  62.     Inc(pBuf);
  63.     Dec(buflen,SizeOf(Word));
  64.     end;
  65. if(buflen<>0)then
  66.     begin
  67.     cksum:=cksum+pBuf^;
  68.     end;
  69. cksum:=(cksum shr 16)+(cksum and $ffff);
  70. cksum:=cksum shr 16;
  71. result:=not cksum;
  72. end;
  73. //---------------------------------------------
  74. //USHORT checksum(USHORT *buffer, int size)
  75. //{
  76. //    unsigned long cksum=0;
  77. //
  78. //    while (size > 1)
  79. //    {
  80. //        cksum += *buffer++;
  81. //        size  -= sizeof(USHORT);
  82. //    }
  83. //    if (size)
  84. //    {
  85. //        cksum += *(UCHAR*)buffer;
  86. //    }
  87. //    cksum = (cksum >> 16) + (cksum & 0xffff);
  88. //    cksum += (cksum >>16);
  89. //
  90. //    return (USHORT)(~cksum);
  91. //}
  92. //--------------------------------------------------
  93. end.