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

Visual C++

  1. #define  ETH_ALEN    6
  2. //#define __LITTLE_ENDIAN_BITFIELD
  3. typedef unsigned char __u8;
  4. typedef unsigned short __u16;
  5. typedef unsigned int __u32;
  6. /* INDENT OFF */
  7. typedef struct _ETH_HEADER
  8. {
  9.     unsigned char   h_dest[ETH_ALEN];
  10.     unsigned char   h_source[ETH_ALEN];
  11.     unsigned short  h_proto;
  12. }               ETH_HEADER;
  13. typedef struct _IP_HEADER
  14. {
  15. #if defined(__LITTLE_ENDIAN_BITFIELD)
  16. __u8         ihl:4,
  17.             version:4;
  18. #elif defined (__BIG_ENDIAN_BITFIELD)
  19. __u8         version:4,
  20.                ihl:4;
  21. #endif
  22.     __u8            tos;
  23.     __u16           tot_len;
  24.     __u16           id;
  25.     __u16           frag_off;
  26.     __u8            ttl;
  27.     __u8            protocol;
  28.     __u16           check;
  29.     __u32           saddr;
  30.     __u32           daddr;
  31. }               IP_HEADER;
  32. typedef struct _TCP_HEADER
  33. {
  34.     __u16           source;
  35.     __u16           dest;
  36.     __u32           seq;
  37.     __u32           ack_seq;
  38. #if defined(__LITTLE_ENDIAN_BITFIELD)
  39. __u16         res1:4,
  40.             doff:4,
  41.             fin:1,
  42.             syn:1,
  43.             rst:1,
  44.             psh:1,
  45.             ack:1,
  46.             urg:1,
  47.             res2:2;
  48. #elif defined(__BIG_ENDIAN_BITFIELD)
  49. __u16         doff:4,
  50.             res1:4,
  51.             res2:2,
  52.             urg:1,
  53.             ack:1,
  54.             psh:1,
  55.             rst:1,
  56.             syn:1,
  57.             fin:1;
  58. #endif
  59.     __u16           window;
  60.     __u16           check;
  61.     __u16           urg_ptr;
  62. }               TCP_HEADER;
  63. typedef struct _UDP_HEADER
  64. {
  65.     __u16           source;
  66.     __u16           dest;
  67. __u16           udpleng;
  68.     __u16           check;
  69. }               UDP_HEADER;
  70. typedef struct _ETHER_PACKET
  71. {
  72.     ETH_HEADER      ETH;
  73.     IP_HEADER       IP;    
  74. } ETHER_PACKET;
  75. struct  NAT_DATA{
  76. USHORT  us_DevInstance;
  77. USHORT  b_Direction;      
  78. ULONG   ul_BufferLength;
  79. UCHAR*  uc_DataBuffer;
  80. };
  81. /*
  82. struct STATICTABLEITEM{
  83. BYTE     type;                  //=1:tcp;=2:udp;3:icmp 
  84.     ULONG    ulIpadress;              
  85. USHORT   usPort;                  
  86. };
  87. struct STATICTABLE{
  88. int   count;
  89.     STATICTABLEITEM*  item;
  90. };
  91. */
  92. struct  NATTABLE_ITEM{
  93. unsigned char     bUse;                //使用标志
  94. unsigned char     us_TimeOut;          //
  95. USHORT   us_InterPort;        //使用的内部端口
  96. USHORT   us_OutPort;          //使用的转换后的外部端口
  97. USHORT   uInSuffixParent;     //in hashID冲突项 
  98. USHORT   uInSuffixNext;       //in hashID冲突项 
  99. USHORT   uOutSuffixParent;    //out hashID冲突项 
  100. USHORT   uOutSuffixNext;      //out hashID冲突项 
  101. ULONG    ul_InterIPAddress;   //使用的内部地址
  102.     ULONG    ul_OutIPAddress;     //与其通讯的外部地址
  103. ULONG    ul_GlobalIPAddress; 
  104. };
  105. struct STATICTCPTABLE{
  106. ULONG    ulIpadress;              
  107. USHORT   usPort;
  108. };
  109. struct STATICUDPTABLE{
  110. ULONG    ulIpadress;              
  111. USHORT   usPort;   
  112. };
  113. USHORT  GetCksum(USHORT* buffer,int size);
  114. //BOOL  NatForOutPacket(BYTE* EthBuffer,ULONG packetlength,USHORT Adapternumber);
  115. //BOOL  NatForInPacket(BYTE* EthBuffer,ULONG packetlength,USHORT Adapternumber);
  116. BOOL  GetTCPCksum(BYTE* buffer,int leng);
  117. BOOL  GetUDPCksum(BYTE* buffer,int leng);
  118. BOOL  GetIPCksum(BYTE* buffer,int leng);
  119. void NatCfg();
  120. inline NATTABLE_ITEM* NatSearch(BYTE* EthBuffer,BOOL bDirection, USHORT type);
  121. USHORT  NATGetIndexOther(ULONG ipaddress1,ULONG ipaddress2,USHORT sport);
  122. BOOL  NATableTimeInspec();
  123. BOOL  NATableTimeInspecUDP();
  124. BOOL NatPacket(BYTE* total_EthBuffer);
  125. inline USHORT swaps(USHORT port);
  126. void NatDelItem();
  127. void NatBeginThread(PVOID temp);
  128. NATTABLE_ITEM*  NatTableAddItem(BYTE* EthBuffer,BOOL bDirection, USHORT type);
  129. void ClearNatUseResoure();
  130. inline BOOL NATSearchStatic(BYTE* EthBuffer,BOOL Direction,USHORT type);
  131. /*for test*/
  132. //BOOL  NatForInIcmpPacket(BYTE* EthBuffer,ULONG packetlength,USHORT Adapternumber);
  133. //BOOL  NatForOutIcmpPacket(BYTE* EthBuffer,ULONG packetlength,USHORT Adapternumber);