www.pudn.com > NETINFO.rar > netinfoClass.h


#ifndef _NETINFO_H_ 
#define _NETINFO_H_ 
 
//四.	获取数据接口 
struct NETINFO_CALLBACKS  
{ 
//==========================================================================================// 
//原始包(包括MAC层)响应函数 
// 
	//通知用户原始包的到来 
	void (*OnRawPacket)(HNETINFO hNi, const BYTE* pData, DWORD length); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//TCP连接(包括LINE,FTP,SMTP,POP3,HTTP等)打开关闭处理函数 
// 
	//通知用户并由用户决定此连接是否打开,及其打开类型,返回TRUE表明打开, 返回FALSE表明不打开 
	BOOL (*OnOpenConnect)(HNETINFO hNi, const TCP_ADDR* connecter, const TCP_ADDR* listener,  
						enum CONNECT_TYPE *retType, DWORD* pdwAttachData); 
	//通知用户某连接将关闭 
	void (*OnCloseConnect)(HNETINFO hNi, HTCPCONNECT hConnect); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//原始TCP连接(不包括LINE,FTP,SMTP,POP3,HTTP等)数据响应函数 
// 
	//通知用户某TCP连接有数据到达 
	void (*OnTcpData)(HNETINFO hNi, HTCPCONNECT hConnect, BOOL bConnecterToListener,  
					const BYTE*pData, DWORD length); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//文本行TCP连接(不包括FTP,SMTP,POP3,HTTP等)响应函数 
// 
	//通知用户某文本行TCP连接有文本行数据到达 
	//line include ending CRLF and NULL chars ( 3 char ), lineLen = strlen(line)  
	void (*OnTcpLine)(HNETINFO hNi, HLINECONNECT hConnect, BOOL bConnecterToListener,  
					const char*line, DWORD lineLen); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//FTP连接响应函数 
// 
	//通知用户某ftp连接客户端已发出命令,此命令行尾部的CRLF已被去掉 
	void (*OnFtpCommand)(HNETINFO hNi, HFTPCONNECT hFtpConnect, const char* szCommand); 
	//通知用户某ftp连接服务端已发出应答,此应答及对应的行尾部的CRLF已被去掉 
	void (*OnFtpReply)(HNETINFO hNi, HFTPCONNECT hFtpConnect,  
		const char* szCommand, const char* szReply); 
	//通知用户某ftp连接已准备传送一个文件,  
	//参数szFullUnixFilePath已包含了'/'为目录分隔符的全路径 
	void (*OnFtpFileTransferBegin)(HNETINFO hNi, HFTPCONNECT hFtpConnect, DWORD dwStartPos, 
						BOOL bClientToServer, const char* szFullUnixFilePath);						 
	//通知用户某FTP连接的某文件有一段数据已被传输 
	void (*OnFtpFileData)(HNETINFO hNi, HFTPCONNECT hFtpConnect,  
						const BYTE*pData, DWORD length); 
	//通知用户某FTP连接的某文件已传输完毕 
	void (*OnFtpFileTransferEnd)(HNETINFO hNi, HFTPCONNECT hFtpConnect); 
//==========================================================================================// 
 
 
//==========================================================================================// 
//HTTP连接响应函数 
// 
	//通知用户某HTTP连接的客户端即将发消息 
	void (*OnHttpClientBegin)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
	//通知用户某HTTP连接的客户端发送的消息头 
	void (*OnHttpClientHeader)(HNETINFO hNi, HHTTPCONNECT hHttpConnect, 
						const HTTP_HEADER_INFO* pClientHeader); 
	//通知用户某HTTP连接的客户端即将发送的已解码的消息体数据 
	void (*OnHttpClientBody)(HNETINFO hNi, HHTTPCONNECT hHttpConnect,  
					const BYTE* pData, DWORD length); 
	//通知用户某HTTP连接的客户端发送的消息体数据结束 
	void (*OnHttpClientEnd)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
 
 
	//通知用户某HTTP连接的服务器端即将发消息 
	void (*OnHttpServerBegin)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
	//通知用户某HTTP连接的服务器端发送的消息头 
	void (*OnHttpServerHeader)(HNETINFO hNi, HHTTPCONNECT hHttpConnect, 
						const HTTP_HEADER_INFO* pClientHeader, const HTTP_HEADER_INFO* pServerHeader); 
	//通知用户某HTTP连接的服务器端发送的已解码的消息体数据 
	void (*OnHttpServerBody)(HNETINFO hNi, HHTTPCONNECT hHttpConnect,  
					const BYTE* pData, DWORD length); 
	//通知用户某HTTP连接的服务器端发送的消息体数据结束 
	void (*OnHttpServerEnd)(HNETINFO hNi, HHTTPCONNECT hHttpConnect); 
//==========================================================================================// 
 
 
 
//==========================================================================================// 
//SMTP连接响应函数 
// 
	//通知用户某SMTP连接的客户端已发出命令,此命令行尾部的CRLF已被去掉 
	void (*OnSmtpCommand)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect, const char* szCommand); 
	//通知用户某SMTP连接的服务器端已发出回应,此回应行尾部的CRLF已被去掉 
	void (*OnSmtpReply)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
						const char* szCommand, const char* szReply); 
 
	//通知用户某SMTP连接的客户端已准备发信 
	void (*OnSmtpMessageTransferBegin)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect); 
	//通知用户某SMTP连接的客户端发出的信头 
	void (*OnSmtpMessageHeader)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
							const char* from, const char* to, const char* subject); 
	//通知用户已解码出的MIME实体头信息 
	void (*OnSmtpMessageEntityHeader)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
							const char* mimeMainType, const char* mimeSubType,  
							const char* filename); 
	//通知用户已解码出的MIME实体内容 
	void (*OnSmtpMessageEntityBody)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect,  
			const BYTE* pData, DWORD length); 
	//通知用户正在解码的MIME实体已经结束 
	void (*OnSmtpMessageEntityBodyEnd)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect); 
	//通知用户某SMTP的信传输结束 
	void (*OnSmtpMessageTransferEnd)(HNETINFO hNi, HSMTPCONNECT hSmtpConnect); 
//==========================================================================================// 
 
 
 
//==========================================================================================// 
//POP3连接响应函数 
// 
	//通知用户某POP3连接的客户端已发出命令,此命令行尾部的CRLF已被去掉 
	void (*OnPop3Command)(HNETINFO hNi, HPOP3CONNECT hPop3Connect, const char* szCommand); 
	//通知用户某POP3连接的服务器端已发出回应,此回应行尾部的CRLF已被去掉 
	void (*OnPop3Reply)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
						const char* szCommand, const char* szReply); 
 
	//通知用户某POP3连接的客户端已准备收信 
	void (*OnPop3MessageTransferBegin)(HNETINFO hNi, HPOP3CONNECT hPop3Connect); 
	//通知用户某POP3连接的客户端收到的信头 
	void (*OnPop3MessageHeader)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
							const char* from, const char* to, const char* subject); 
	//通知用户已解码出的MIME实体头信息 
	void (*OnPop3MessageEntityHeader)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
							const char* mimeMainType, const char* mimeSubType,  
							const char* filename); 
	//通知用户已解码出的MIME实体内容 
	void (*OnPop3MessageEntityBody)(HNETINFO hNi, HPOP3CONNECT hPop3Connect,  
			const BYTE* pData, DWORD length); 
	//通知用户正在解码的MIME实体已经结束 
	void (*OnPop3MessageEntityBodyEnd)(HNETINFO hNi, HPOP3CONNECT hPop3Connect); 
	//通知用户某POP3的信传输结束 
	void (*OnPop3MessageTransferEnd)(HNETINFO hNi, HPOP3CONNECT hPop3Connect); 
//==========================================================================================// 
}; 
 
 
struct NetInfo 
{ 
	//big object 
	BOOL m_bInputIsFile; 
//PCAP.H(64):typedef struct pcap pcap_t 
	pcap_t *m_pInputPcap; 
	pcap_t *m_pOutputPcap; 
	pcap_dumper_t *m_pDumpFile; 
	CPtrList *m_pAcl;//CPtrList class supports lists of void pointers 
	CPtrList *m_pTempAcl;//CObject*& CObList::GetHead() const; = void*& CPtrList::GetHead() const; 
	CPtrList *m_pDns; 
//hashTbl.h(6):typedef CMap CMapKeyToConnect; 
//&表示值是结构或者类 
//Unlike lists, which index and order the data they store, 
//maps associate keys and values: 
//You access a value stored in a map by specifying the value’s associated key.  
	CMapKeyToConnect* m_hashTbl; 
//typedef CList CFtpDataMatchList 
	CFtpDataMatchList* m_pFtpDataMatchList; 
 
	//control variables 
	BOOL m_bDoNothing; 
 
	//synchronous variables 
	BOOL m_bShouldExit; 
	DWORD m_dwPcapEnterCount; 
 
	//check timeout variables 
	time_t m_lastConnectCheckTime; 
	time_t m_lastTempAclCheckTime; 
 
	//attach data 
	DWORD m_dwAttachData; 
 
	//call back functions 
	NETINFO_CALLBACKS m_funcs; 
 
	//loop thread 
	HANDLE m_hLoopThread; 
}; 
 
typedef NetInfo* HNETINFO; 
 
 
//二.	打开和关闭网络适配器的调用接口 
HNETINFO OpenAdapter(BOOL bInputIsFile, const void* inputString, 
					 const char* outputFileString, const void* outputAdapterString, 
					 char* szPcapFilter, const char* szAclFile, const char* szDnsFile,  
					 BOOL bDoNothing, const NETINFO_CALLBACKS *funcs); 
//adapterString为从GetAdapterString()得到的返回值, 
//funcs是回调函数接口 
 
//会启动监听和解码主循环线程 
void StartAdapter(HNETINFO hNi); 
 
//检测监听和解码主循环线程是否已经退出 
BOOL AdapterIsStopped(HNETINFO hNi); 
 
//会停止监听和解码主循环线程 
void StopAdapter(HNETINFO hNi); 
 
//关闭hNi所代表的网络适配器资源 
void CloseAdapter(HNETINFO hNi); 
BOOL AdapterSendPacket(HNETINFO hNi, BOOL bInputAdapter, const BYTE*pData, DWORD length); 
 
//存取HNETINFO属性 
void SetAdapterAttachData(HNETINFO hNi, DWORD dwAttachData); 
DWORD GetAdapterAttachData(HNETINFO hNi); 
DWORD GetAdapterConnectCount(HNETINFO hNi); 
 
 
//五.  网络控制接口 
//控制列表分为永久性列表和临时性列表两类, 
//区别在于临时性列表中的控制项目具有有效期,过了有效期则会被自动删除 
//永久性列表永久有效,不会被自动删除 
//这两中列表都可以进行添加、删除、遍历操作 
void AddTempAclItem(HNETINFO hNi, const ACL_ITEM *pItem); 
 
#endif