protocol.h
上传用户:qxsjcl
上传日期:2007-01-08
资源大小:263k
文件大小:6k
源码类别:

网络截获/分析

开发平台:

Visual C++

  1. #include "ntddndis.h"
  2. #define UNICODE 1
  3. #define __LITTLE_ENDIAN_BITFIELD
  4. #pragma pack(push)
  5. #pragma pack(1)
  6. typedef unsigned char __u8;
  7. typedef unsigned short __u16;
  8. typedef unsigned int __u32;
  9. /************************************************/
  10. /*  PROTOCOL DATA STRUCTURE                     */
  11. /************************************************/
  12. /* Frame type field must be "8"
  13. |   6 Bytes         |    6 Bytes       |  2 Bytes  |
  14. ---------------------------------------------------------------
  15. |Destination address|  Source address  |Frame type | Frame data
  16. ---------------------------------------------------------------
  17. */
  18. /*
  19.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  20.     ]       Ethernet destination address (first 32 bits)            ]
  21.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  22.     ] Ethernet dest (last 16 bits)  ]Ethernet source (first 16 bits)]
  23.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  24.     ]       Ethernet source address (last 32 bits)                  ]
  25.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  26.     ]        Type code              ]
  27.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  28.     ]  IP header, then TCP header, then your data                   ]
  29.     ]                                                               ]
  30.         ...
  31.     ]                                                               ]
  32.     ]   end of your data                                            ]
  33.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  34.     ]                       Ethernet Checksum                       ]
  35.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  36. */
  37. typedef struct _ETH_HEADER
  38. {
  39.     unsigned char   h_dest[6];
  40.     unsigned char   h_source[6];
  41.     unsigned short  h_proto;
  42. }ETH_HEADER;
  43. /*
  44.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  45.     ]Version]  IHL  ]Type of Service]          Total Length         ]
  46.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  47.     ]         Identification        ]Flags]      Fragment Offset    ]
  48.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  49.     ]  Time to Live ]    Protocol   ]         Header Checksum       ]
  50.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  51.     ]                       Source Address                          ]
  52.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  53.     ]                    Destination Address                        ]
  54.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  55.     ]  TCP header, then your data ......                            ]
  56.     ]                                                               ]
  57. */
  58. typedef struct _IP_HEADER
  59. {
  60. #if defined(__LITTLE_ENDIAN_BITFIELD)
  61. __u8         ihl:4,
  62.             version:4;
  63. #elif defined (__BIG_ENDIAN_BITFIELD)
  64. __u8         version:4,
  65.                ihl:4;
  66. #endif
  67.     __u8            tos;
  68.     __u16           tot_len;
  69.     __u16           id;
  70.     __u16           frag_off;
  71.     __u8            ttl;
  72.     __u8            protocol;
  73.     __u16           check;
  74.     __u32           saddr;
  75.     __u32           daddr;
  76. }               IP_HEADER;
  77. /*
  78.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  79.     ]          Source Port          ]       Destination Port        ]
  80.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  81.     ]                        Sequence Number                        ]
  82.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  83.     ]                    Acknowledgment Number                      ]
  84.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  85.     ]  Data ]           ]U]A]P]R]S]F]                               ]
  86.     ] Offset] Reserved  ]R]C]S]S]Y]I]            Window             ]
  87.     ]       ]           ]G]K]H]T]N]N]                               ]
  88.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  89.     ]           Checksum            ]         Urgent Pointer        ]
  90.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  91.     ]   your data ... next 500 octets                               ]
  92.     ]   ......                                                      ]
  93. */
  94. typedef struct _TCP_HEADER
  95. {
  96.     __u16           source;
  97.     __u16           dest;
  98.     __u32           seq;
  99.     __u32           ack_seq;
  100. #if defined(__LITTLE_ENDIAN_BITFIELD)
  101. __u16         res1:4,
  102.             doff:4,
  103.             fin:1,
  104.             syn:1,
  105.             rst:1,
  106.             psh:1,
  107.             ack:1,
  108.             urg:1,
  109.             res2:2;
  110. #elif defined(__BIG_ENDIAN_BITFIELD)
  111. __u16         doff:4,
  112.             res1:4,
  113.             res2:2,
  114.             urg:1,
  115.             ack:1,
  116.             psh:1,
  117.             rst:1,
  118.             syn:1,
  119.             fin:1;
  120. #endif
  121.     __u16           window;
  122.     __u16           check;
  123.     __u16           urg_ptr;
  124. }               TCP_HEADER;
  125. typedef struct _ETHER_PACKET
  126. {
  127.     ETH_HEADER      ETH;
  128.     IP_HEADER       IP;
  129.     TCP_HEADER      TCP;
  130. }ETHER_PACKET;
  131. typedef struct _CONTROL_BLOCK
  132. {
  133.     PVOID       hFile;
  134.     HANDLE      hEvent;
  135.     TCHAR       AdapterName[128];
  136.     HANDLE      hMem;
  137.     LPBYTE      lpMem;
  138.     ULONG       PacketLength;
  139.     ULONG       LastReadSize;
  140.     UINT        BufferSize;
  141. }CONTROL_BLOCK, *PCONTROL_BLOCK;
  142. #pragma pack(pop)
  143. #define   MAX_LINK_NAME_LENGTH   64
  144. typedef struct _ADAPTER {
  145.     HANDLE     hFile;
  146.     TCHAR      SymbolicLink[MAX_LINK_NAME_LENGTH];
  147. }ADAPTER, *LPADAPTER;
  148. typedef struct _PACKET {
  149.     HANDLE       hEvent;
  150.     OVERLAPPED   OverLapped;
  151.     PVOID        Buffer;
  152.     UINT         Length;
  153. } PACKET, *LPPACKET;
  154. extern "C"
  155. {
  156. ULONG PacketGetAdapterNames(PTSTR   pStr,PULONG  BufferSize);
  157. PVOID PacketOpenAdapter(LPTSTR   AdapterName);
  158. VOID  PacketCloseAdapter(LPADAPTER   lpAdapter);
  159. BOOLEAN PacketSetFilter(LPADAPTER  AdapterObject,ULONG      Filter);
  160. PVOID PacketAllocatePacket(LPADAPTER   AdapterObject);
  161. VOID PacketInitPacket(LPPACKET lpPacket,PVOID Buffer,UINT Length);
  162. VOID PacketFreePacket( LPPACKET    lpPacket  );
  163. BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync,PULONG BytesReceived);
  164. }