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