Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / 2 / lab.05.by mice / spice / src / csp_parser

.h
Скачиваний:
9
Добавлен:
17.04.2013
Размер:
7.47 Кб
Скачать
/*******************************************************************************
* file:         csp_parser.h                                                   *
* version:      0.0.1                                                          *
* author:       d-evil [tmd] (mailto:d-evil.tmd@mail.ru)                       *
* description:  not available                                                  *
*******************************************************************************/

#ifndef CSP_PARSER_INCLUDED
#define CSP_PARSER_INCLUDED


////////////////////////////////////////////////////////////////////////////////
// headers
#include <afx.h>
#include <winsock2.h>
#include "cdm_addr_info.h"
#include "win_errors.h"


static const char *protocols[] = { 
		           "Reserved",     //  0
                   "ICMP",         //  1
                   "IGMP",         //  2
                   "GGP",          //  3
                   "IP",           //  4
                   "ST",           //  5
                   "TCP",          //  6
                   "UCL",          //  7
                   "EGP",          //  8
                   "IGP",          //  9
                   "BBN-RCC-MON",  // 10
                   "NVP-II",       // 11
                   "PUP",          // 12
                   "ARGUS",        // 13
                   "EMCON",        // 14
                   "XNET",         // 15
                   "CHAOS",        // 16
                   "UDP",          // 17
                   "MUX",          // 18
                   "DCN-MEAS",     // 19
                   "HMP",          // 20
                   "PRM",          // 21
                   "XNS-IDP",      // 22
                   "TRUNK-1",      // 23
                   "TRUNK-2",      // 24
                   "LEAF-1",       // 25
                   "LEAF-2",       // 26
                   "RDP",          // 27
                   "IRTP",         // 28
                   "ISO-TP4",      // 29
                   "NETBLT",       // 30
                   "MFE-NSP",      // 31
                   "MERIT-INP",    // 32
                   "SEP",          // 33
                   "3PC",          // 34
                   "IDPR",         // 35
                   "XTP",          // 36
                   "DDP",          // 37
                   "IDPR-CMTP",    // 38
                   "TP++",         // 39
                   "IL",           // 40
                   "SIP",          // 41
                   "SDRP",         // 42
                   "SIP-SR",       // 43
                   "SIP-FRAG",     // 44
                   "IDRP",         // 45
                   "RSVP",         // 46
                   "GRE",          // 47
                   "MHRP",         // 48
                   "BNA",          // 49
                   "SIPP-ESP",     // 50
                   "SIPP-AH",      // 51
                   "I-NLSP",       // 52
                   "SWIPE",        // 53
                   "NHRP",         // 54
                   "unknown",      // 55
                   "unknown",      // 56
                   "unknown",      // 57
                   "unknown",      // 58
                   "unknown",      // 59
                   "unknown",      // 60
                   "unknown",      // 61
                   "CFTP",         // 62
                   "unknown",      // 63
                   "SAT-EXPAK",    // 64
                   "KRYPTOLAN",    // 65
                   "RVD",          // 66
                   "IPPC",         // 67
                   "unknown",      // 68
                   "SAT-MON",      // 69
                   "VISA",         // 70
                   "IPCV",         // 71
                   "CPNX",         // 72
                   "CPHB",         // 73
                   "WSN",          // 74
                   "PVP",          // 75
                   "BR-SAT-MON",   // 76
                   "SUN-ND",       // 77
                   "WB-MON",       // 78
                   "WB-EXPAK",     // 79
                   "ISO-IP",       // 80
                   "VMTP",         // 81
                   "SECURE-VMTP",  // 82
                   "VINES",        // 83
                   "TTP",          // 84
                   "NSFNET-IGP",   // 85
                   "DGP",          // 86
                   "TCF",          // 87
                   "IGRP",         // 88
                   "OSPFIGP",      // 89
                   "Sprite-RPC",   // 90
                   "LARP",         // 91
                   "MTP",          // 92
                   "AX.25",        // 93
                   "IPIP",         // 94
                   "MICP",         // 95
                   "SCC-SP",       // 96
                   "ETHERIP",      // 97
                   "ENCAP",        // 98
                   "unknown",      // 98
                   "GMTP"          // 99
                  };
static const char *proto_unknown_str = "unknown";

static const char *icmp_types[] = {
					"EchoRply",		// 0
					"HZ (1)",		// 1
					"HZ (2)",		// 2
					"DestUnRch",	// 3
					"SrcQuench",	// 4
					"Redirect",		// 5
					"HZ (6)",		// 6
					"HZ (7)",		// 7
					"Echo",			// 8
					"HZ (8)",		// 9
					"HZ (9)",		// 10
					"TimeExceed",	// 11
					"ParamProbl",	// 12
					"TimeStmp",		// 13
					"TimeStmpRp",	// 14
					"InfoReqst",	// 15
					"InfoRply",		// 16
				  };

#pragma pack(1)
struct header_ip {
	unsigned char  hlen:4;
	unsigned char  ver:4;
	unsigned char  type_of_service;
	unsigned short total_len;
	unsigned short id;
	unsigned short flags;
	unsigned char  ttl;
	unsigned char  proto;
	unsigned short checksum;
	unsigned int   sourceIP;
	unsigned int   destIP;
};


struct header_icmp {
	unsigned char type;
	unsigned char code;
	unsigned short checksum;
};


struct header_udp {
	unsigned short src_port;
	unsigned short dest_port;
	unsigned short length;
	unsigned short check_sum;
};


struct header_tcp {
	unsigned short src_port;
	unsigned short dest_port;
	unsigned int seq_num;
	unsigned int ackn_num;	// Acknowledgment Number
	unsigned short data_offset:4;
	unsigned short reserved:6;
	unsigned short flags:6;
	unsigned short wnd;
	unsigned short check_sum;
	unsigned short urgent_ptr;
};
#pragma pack()


////////////////////////////////////////////////////////////////////////////////
// csp_parser declaration
class csp_parser {
public:
	csp_parser();
	~csp_parser();

	int get_id() { return _id; }
	void set_id(const int id) { _id = id; }

	int parse(char *const dtgm, const int sz, const bool resolve = false);
	char *html() { return _html.GetBuffer(); }
	int html_len() const { return _html.GetLength(); }
	CString *html_str() { return &_html; }

	static const char *proto_str(const int proto);

protected:
	int _parse_ip(const bool resolve = false);
	int _parse_ip_params();
	int _parse_proto();
	int _parse_icmp();
	int _parse_udp();
	int _parse_tcp();
	int _parse_unknown();
	int _print_content();
	const char *_icmp_type_str(const int type);

private:
	char *_dtgm;
	int _dtgm_sz;
	char *_proto_d;
	int _proto_dsz;
	char *_data2pr;
	int _data2pr_sz;
	CString _str;

	header_ip _header_ip;
	CString _html;
	cdm_addr_info _addr_solver;

	static int _id;
};



#endif
Соседние файлы в папке src