Packet.h
上传用户:yitai_qhd
上传日期:2008-04-24
资源大小:31k
文件大小:4k
开发平台:

Visual C++

  1. #ifndef PACKET_H
  2. #define PACKET_H
  3. extern "C"
  4. {
  5. #include "ntddk.h"
  6. #ifndef dprintf
  7.     #define dprintf KdPrint
  8.     #endif
  9. }
  10. #include "ndis.h"
  11. //
  12. // Ethernet header
  13. //
  14. typedef struct _ETHERNET_FRAME
  15. {
  16. unsigned char DestinationAddress[6]; // 0xFFFFFF is Broadcast
  17. unsigned char SourceAddress[6];
  18. unsigned int FrameType; // in host-order
  19. } EHTERNET_FRAME, *PETHERNET_FRAME;
  20. #define ETHERNET_FRAME_LENGTH 14
  21. #define ETHERNET_FRAME_TYPE_INVALID 0xFFFF // Invalid Ethernet Frame
  22. #define ETHERNET_FRAME_TYPE_TCPIP 0x0800 // TCP/IP Protocol
  23. #define ETHERNET_FRAME_TYPE_PUP 0x0200 // PUP Protocol
  24. #define ETHERNET_FRAME_TYPE_ARP 0x0806 // ARP protocol
  25. #define ETHERNET_FRAME_TYPE_RARP 0x8035 // RAPR Protocol
  26. //
  27. // Ip header
  28. //
  29. typedef struct _IP_HEADER
  30. {
  31. union
  32. {
  33. unsigned char VersionAndHeaderLength; // Version 4 bit, Header Length 4 bit * 4
  34. struct
  35. {
  36. unsigned char HeaderLength : 4;
  37. unsigned char Version : 4;
  38. };
  39. };
  40. unsigned char TypeOfService;
  41. unsigned int DatagramLength;
  42. unsigned int Id;
  43. unsigned int FlagsAndFragmentOffset; // Flags 3 bit, Fragment Offset 13 bit
  44. unsigned char TimeToLive;
  45. unsigned char Protocol;
  46. unsigned int CheckSum;
  47. unsigned char SourceIp[4];
  48. unsigned char DestinationIp[4];
  49. } IP_HEADER, *PIP_HEADER;
  50. #define IP_HEADER_LENGTH 20
  51. #define PROTOCOL_INVALID_IP 0xFF
  52. #define PROTOCOL_INVALID_TCP 0xFE
  53. #define PROTOCOL_INVALID_UDP 0xFD
  54. #define PROTOCOL_INVALID_ICMP 0xFC
  55. #define PROTOCOL_TCP 0x06
  56. #define PROTOCOL_UDP 0x11
  57. #define PROTOCOL_ICMP 0x01
  58. #define PROTOCOL_IGMP 0x02
  59. #define HEADER_LENGTH_MULTIPLE 4
  60. #define GET_IP_VERSION(verlen) ((verlen & 0xF0) >> 4)
  61. #define GET_IP_HEADER_LENGTH(verlen) ((verlen & 0x0F) * HEADER_LENGTH_MULTIPLE)
  62. #define GET_IP_FLAGS(ffo) ((ffo & 0xE000) >> 13)
  63. #define GET_IP_FRAGMENT_OFFSET(ffo) (ffo & 0x1FFF)
  64. //
  65. // Tcp Header
  66. //
  67. typedef struct _TCP_HEADER
  68. {
  69. unsigned int SourcePort;
  70. unsigned int DestinationPort;
  71. unsigned long SeqNumber;
  72. unsigned long AckNumber;
  73. union
  74. {
  75. unsigned int LenAndCodeBits; // Header length 4 bit, Reserved 6 bit, Code Bits 6 bit
  76. struct
  77. {
  78. unsigned int Reserved1 : 8;
  79. unsigned int TcpCode : 6;
  80. unsigned int Reserved2 : 2;
  81. };
  82. struct
  83. {
  84. unsigned int Reserved3 : 4;
  85. unsigned int HeaderLength : 4;
  86. unsigned int TcpFin : 1;
  87. unsigned int TcpSyn : 1;
  88. unsigned int TcpRst : 1;
  89. unsigned int TcpPsh : 1;
  90. unsigned int TcpAck : 1;
  91. unsigned int TcpUrg : 1;
  92. unsigned int Reserved4 : 2;
  93. };
  94. };
  95. unsigned int Window;
  96. unsigned int CheckSum;
  97. unsigned int UrgentPointer;
  98. } TCP_HEADER, *PTCP_HEADER;
  99. #define TCP_HEADER_LENGTH 20
  100. #define GET_TCP_HEADER_LENGTH(lcb) (((lcb & 0xF000) >> 12) * HEADER_LENGTH_MULTIPLE)
  101. #define GET_TCP_CODE_BITS(lcb) (lcb & 0x003F)
  102. //
  103. // Udp Header
  104. //
  105. typedef struct _UDP_HEADER
  106. {
  107. unsigned int SourcePort;
  108. unsigned int DestinationPort;
  109. unsigned int Length; // including this header 
  110. unsigned int CheckSum;
  111. } UDP_HEADER, *PUDP_HEADER;
  112. #define UDP_HEADER_LENGTH 8
  113. //
  114. // Icmp Header
  115. //
  116. typedef struct _ICMP_HEADER
  117. {
  118. unsigned char Type;
  119. unsigned char Code; // type sub code
  120. unsigned int CheckSum;
  121. unsigned int ID;
  122. unsigned int Seq;
  123. } ICMP_HEADER, *PICMP_HEADER;
  124. #define ICMP_HEADER_LENGTH 8
  125. #define ICMP_NORMAL 0
  126. #define ICMP_REQUEST 1
  127. #define ICMP_RESPONSE 2
  128. #define NETBIOS_MIN_PACKET_SIZE 48
  129. USHORT
  130. ntohs(
  131. IN USHORT netshort
  132. );
  133. ULONG
  134. ntohl(
  135. IN ULONG netlong
  136. );
  137. #endif