All pastes #574326 Raw Edit

C_Sniffer.h

public text v1 · immutable
·published 2007-06-18 14:57 UTC
rendered paste body
#pragma once

#include <string>
#include <map>
#include <queue>
#include <pcap.h>
#include <windows.h>
#include <Winsock2.h>
#include "NetworkObjects.h"


#pragma comment(lib, "wpcap.lib")
#pragma comment(lib, "packet.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "kernel32.lib")

class C_Sniffer
{
public:
	C_Sniffer(void);
	~C_Sniffer(void);
	
	bool Start();
	bool Stop();
	bool IsRunning();


protected:
	typedef struct _S_ThreadArgs
	{
		pcap_t *m_Handle;
		bool m_Running;
		C_Sniffer* m_Instance;
	} S_ThreadArgs;

	typedef struct _S_WinPcapPacket
	{
	public:
		_S_WinPcapPacket(const pcap_pkthdr* header, const unsigned char* data)
		{
			
			this->data = (unsigned char*)malloc(header->len);
			if(this->data == NULL)
			{
				memset(&this->header,0,sizeof(this->header));
				return;
			}

			memcpy(&this->header,header,sizeof(this->header));
			memcpy(this->data,data,header->len);
			
		}
		_S_WinPcapPacket(const _S_WinPcapPacket& right)
		{
			
			this->data = (unsigned char*)malloc(right.header.len);
			if(this->data == NULL)
			{
				memset(&this->header,0,sizeof(this->header));
				return;
			}

			memcpy(&this->header,&right.header,sizeof(this->header));
			memcpy(this->data,right.data,right.header.len);
		}
		
		struct pcap_pkthdr header;
		u_char* data;

	} S_WinPcapPacket;

	static void Callback(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
	static DWORD WINAPI ThreadCapturingProc( LPVOID lpParam );
	static DWORD WINAPI ThreadProcessingProc( LPVOID lpParam );
	

protected:
	typedef std::map<long, std::string> T_ResolveMap;
	typedef std::pair<long, std::string> T_ResolvePair;

	T_ResolveMap m_IpResolver;

	static std::queue<S_WinPcapPacket> m_Packets;
	static CRITICAL_SECTION m_PacketsSection;

	S_ThreadArgs m_CapturingArgs;
	S_ThreadArgs m_ProcessingArgs;
	
	bool m_ThreadCapturingRunning;
	bool m_ThreadProcessingRunning;
	
	HANDLE m_ThreadCapturing;
	DWORD m_ThreadCapturingId;

	HANDLE m_ThreadProcessing;
	DWORD m_ThreadProcessingId;
};