iphdr.h
上传用户:benyan892
上传日期:2010-01-28
资源大小:158k
文件大小:4k
源码类别:

网络截获/分析

开发平台:

Visual C++

  1. #ifndef _IPHDR_H_
  2. #define _IPHDR_H_
  3. #include <pshpack1.h>
  4. #include <ws2tcpip.h>
  5. //
  6. // IPv4 Header (without any IP options)
  7. //
  8. typedef struct ip_hdr
  9. {
  10.     unsigned char  ip_verlen;        // 4-bit IPv4 version
  11.                                      // 4-bit header length (in 32-bit words)
  12.     unsigned char  ip_tos;           // IP type of service
  13.     unsigned short ip_totallength;   // Total length
  14.     unsigned short ip_id;            // Unique identifier 
  15.     unsigned short ip_offset;        // Fragment offset field
  16.     unsigned char  ip_ttl;           // Time to live
  17.     unsigned char  ip_protocol;      // Protocol(TCP,UDP etc)
  18.     unsigned short ip_checksum;      // IP checksum
  19.     unsigned int   ip_srcaddr;       // Source address
  20.     unsigned int   ip_destaddr;      // Source address
  21. } IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;
  22. //
  23. // IPv6 Header
  24. //
  25. typedef struct ipv6_hdr
  26. {
  27.     unsigned long   ipv6_vertcflow;        // 4-bit IPv6 version
  28.                                            // 8-bit traffic class
  29.                                            // 20-bit flow label
  30.     unsigned short  ipv6_payloadlen;       // payload length
  31.     unsigned char   ipv6_nexthdr;          // next header protocol value
  32.     unsigned char   ipv6_hoplimit;         // TTL 
  33.     struct in6_addr ipv6_srcaddr;          // Source address
  34.     struct in6_addr ipv6_destaddr;         // Destination address
  35. } IPV6_HDR, *PIPV6_HDR, FAR * LPIPV6_HDR;
  36. //
  37. // IPv6 Fragmentation Header
  38. //
  39. typedef struct ipv6_fragment_hdr
  40. {
  41.     unsigned char   ipv6_frag_nexthdr;      // Next protocol header
  42.     unsigned char   ipv6_frag_reserved;     // Reserved: zero
  43.     unsigned short  ipv6_frag_offset;       // Offset of fragment
  44.     unsigned long   ipv6_frag_id;           // Unique fragment ID
  45. } IPV6_FRAGMENT_HDR, *PIPV6_FRAGMENT_HDR, FAR * LPIPV6_FRAGMENT_HDR;
  46. //
  47. // Define the UDP header 
  48. //
  49. typedef struct udp_hdr
  50. {
  51.     unsigned short src_portno;       // Source port no.
  52.     unsigned short dest_portno;      // Dest. port no.
  53.     unsigned short udp_length;       // Udp packet length
  54.     unsigned short udp_checksum;     // Udp checksum
  55. } UDP_HDR, *PUDP_HDR;
  56. //
  57. // Define the TCP header
  58. //
  59. typedef struct tpc_hdr
  60. {
  61.     unsigned short src_portno;       // Source port no.
  62.     unsigned short dest_portno;      // Dest. port no.
  63.     unsigned long  seq_num;          // Sequence number
  64.     unsigned long  ack_num;          // Acknowledgement number;
  65.     unsigned short lenflags;         // Header length and flags
  66.     unsigned short window_size;      // Window size
  67.     unsigned short tcp_checksum;     // Checksum
  68.     unsigned short tcp_urgentptr;    // Urgent data?
  69. } TCP_HDR, *PTCP_HDR;
  70. //
  71. // Stucture to extract port numbers that overlays the UDP and TCP header
  72. //
  73. typedef struct port_hdr
  74. {
  75.     unsigned short src_portno;
  76.     unsigned short dest_portno;
  77. } PORT_HDR, *PPORT_HDR;
  78. //
  79. // IGMP header
  80. //
  81. typedef struct igmp_hdr
  82. {
  83.     unsigned char   version_type;
  84.     unsigned char   max_resp_time;
  85.     unsigned short  checksum;
  86.     unsigned long   group_addr;
  87. } IGMP_HDR, *PIGMP_HDR;
  88. typedef struct igmp_hdr_query_v3
  89. {
  90.     unsigned char   type;
  91.     unsigned char   max_resp_time;
  92.     unsigned short  checksum;
  93.     unsigned long   group_addr;
  94.     unsigned char   resv_suppr_robust;
  95.     unsigned char   qqi;
  96.     unsigned short  num_sources;
  97.     unsigned long   sources[1];
  98. } IGMP_HDR_QUERY_V3, *PIGMP_HDR_QUERY_V3;
  99. typedef struct igmp_group_record_v3
  100. {
  101.     unsigned char   type;
  102.     unsigned char   aux_data_len;
  103.     unsigned short  num_sources;
  104.     unsigned long   group_addr;
  105.     unsigned long   source_addr[1];
  106. } IGMP_GROUP_RECORD_V3,  *PIGMP_GROUP_RECORD_V3;
  107. typedef struct igmp_hdr_report_v3
  108. {
  109.     unsigned char   type;
  110.     unsigned char   reserved1;
  111.     unsigned short  checksum;
  112.     unsigned short  reserved2;
  113.     unsigned short  num_records;
  114. } IGMP_HDR_REPORT_V3, *PIGMP_HDR_REPORT_V3;
  115. #include <poppack.h>
  116. #endif