IP.H
上传用户:heseme
上传日期:2009-12-23
资源大小:228k
文件大小:3k
开发平台:

Visual C++

  1. #if !defined(FIREWALLIP)
  2. #define FIREWALLIP
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. //网络包包头结构定义 
  7. #include "StdAfx.h"
  8. #include "ipfilter.h"
  9. #define ETHER_PROTO_IP 0x0800
  10. #define ETHER_PROTO_ARP 0x0806
  11. //#define ETHER_PROTO_REVARP 0x
  12. #define ETHER_HEAD_LEN 14
  13. #define IFT_ETHER 105//gj
  14. #define IP_VER 4
  15. #define IP_HEAD_LEN 5
  16. #define IP_SERV_TYPE 0
  17. #define IP_PROTO_TCP 6
  18. #define IP_PROTO_UDP 17
  19. #define IP_PROTO_ICMP 1
  20. #define IP_PROTO_IGMP 2
  21. #define IP_PAD 0
  22. #define IP_MF 0x4000
  23. #define IP_DF 0x2000
  24. #define IP_FLAG_MASK 0x1fff
  25. #define IP_HEAD_BYTE_LEN 20
  26. #define TCP_HEAD_LEN 5
  27. #define TCP_URG 0x20
  28. #define TCP_ACK 0x10
  29. #define TCP_PSH 0x08
  30. #define TCP_RST 0x04
  31. #define TCP_SYN 0x02
  32. #define TCP_FIN 0x01
  33. #define TCP_HEAD_BYTE_LEN 20
  34. #define UDP_HEAD_LEN 8
  35. #define PSEUDO_HEAD_LEN 12
  36. #define ICMP_HEAD_LEN 4
  37. #define IPF_PROCESS_PKT 100//gj
  38. #define  IPF_DROP_PKT    101//gj
  39. #define  IPF_DROP_AND_ANSWER_PKT  102//gj
  40. #define IPF_FORWARD_PKT  104//gj
  41. struct EtherAddr {
  42. unsigned char AddrByte[6];
  43. };
  44. struct ether_header{
  45.    struct EtherAddr ether_dhost;
  46.    struct EtherAddr ether_shost;
  47.    unsigned short ether_type;
  48. };
  49. struct IPAddr{
  50. unsigned char AddrByte[4];
  51. };
  52. /*
  53. struct ip{
  54. unsigned char VerHlen;
  55. unsigned char Type;
  56. unsigned short TtlLen;
  57. unsigned short Id;
  58. unsigned short Flgoff;
  59. unsigned char TTL;
  60. unsigned char Proto;
  61. unsigned short ChkSum;
  62. in_addr_t ip_src;
  63. in_addr_t ip_dst;
  64. };
  65. */
  66. typedef struct ip{
  67. BYTE  ip_hl:4;//gj
  68. BYTE  ip_v:4;//gj
  69. // BYTE VerHlen;//版本和头标长
  70. BYTE Type;//服务类型
  71. WORD TtlLen;//总长
  72. WORD Id;//标识
  73. WORD Flgoff;//标志和片偏移
  74. BYTE TTL;
  75. BYTE Prot;//高层协议;
  76. WORD ChkSum;//头校验和
  77. in_addr_t ip_src;
  78. in_addr_t ip_dst;
  79. }ip;
  80. struct tcphdr{
  81. WORD th_sport;
  82. WORD th_dport;
  83. DWORD th_seq;
  84. DWORD th_ack;
  85. BYTE /*Hlen*/th_off;//首部长度
  86. BYTE th_flags;//控制标志
  87. WORD WndSize;//窗口大小
  88. WORD th_sum;
  89. WORD UrgPtr;//紧急指针
  90. };
  91. struct icmp{
  92. BYTE icmp_type;
  93. BYTE icmp_code;//代码:项对于Type的具体信息
  94. WORD icmp_cksum;
  95. DWORD icmp_void;//id&seq:应答与请求相匹配
  96. WORD *icmp_data;//gj ADD
  97. };
  98. struct udphdr{
  99. WORD uh_sport;
  100. WORD uh_dport;
  101. WORD Len;//长度(包括报文头和数据)
  102. WORD ChkSum;
  103. };
  104. struct PseudoHead {
  105. struct IPAddr SourIP;
  106. struct IPAddr DestIP;
  107. BYTE Pad;
  108. BYTE Proto;
  109. WORD Len;
  110. };
  111. struct ARPPacket {
  112.  WORD Type;
  113.  WORD Proto;
  114.  BYTE HardAddrLen;
  115.  BYTE AddrLen;
  116.  WORD Oper;
  117.  struct EtherAddr SourEther;
  118.  struct IPAddr SourIP;
  119.  struct EtherAddr DestEther;
  120.  struct IPAddr DestIP;
  121. };
  122. struct pkt_struct{
  123. struct ip i;
  124. struct tcphdr t;
  125. };
  126. #endif