亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? checkacl.cpp

?? 費爾防火墻源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	*session = m_SessionBuf[iIndex];
	m_SessionBuf[iIndex].s = 0;
	return XERR_SUCCESS;
}

BOOL CCheckAcl::InitializeSession(SESSION* session)
{
	ODS(_T("Initialize Session ..."));

	session->bDirection		= ACL_DIRECTION_IN_OUT;
	session->bProtocol 		= ACL_SERVICE_TYPE_ALL;
	session->bAction		= ACL_ACTION_PASS;
	session->tStartTime 	= 0;
	session->uiPort 		= 0;
	session->ulRemoteIP 	= 0;
	session->ulSendData		= 0;
	session->ulRecvData		= 0;
	session->sMemo[0]		= '\0';
	session->uiLocalPort	= 0;
	session->ulLocalIP		= 0;

	return TRUE;
}

int CCheckAcl::CreateSession(SOCKET s, int nProtocol)
{
	ODS("XFILTER.DLL: Create Session...");

	EnterCriticalSection(&m_csSession);
	{
		for(int i = 0; i < m_SessionCount; i++)
		{
			if(m_Session[i].s == s)
			{
				LeaveCriticalSection(&m_csSession);
				return XERR_SESSION_ALREDAY_EXISTS;
			}
		}

		SESSION *tmpSession = new SESSION[m_SessionCount];
		memcpy(tmpSession, m_Session, m_SessionCount * SESSION_LENTH);
		delete[](m_Session);

		m_Session = new SESSION[m_SessionCount + 1];
		memcpy(m_Session, tmpSession, m_SessionCount * SESSION_LENTH);
		delete[](tmpSession);

		InitializeSession(m_Session + m_SessionCount);
		m_Session[m_SessionCount].s			= s;
		m_Session[m_SessionCount].bProtocol = nProtocol;
		m_Session[m_SessionCount].tStartTime = CTime::GetCurrentTime();
		_tcscpy(m_Session[m_SessionCount].sPathName, m_sProcessName);

		m_SessionCount ++;
	}
	LeaveCriticalSection(&m_csSession);

	DP1("Session Count: %u\n", m_SessionCount);

	return m_SessionCount - 1;	// return m_SessionCount will have a bug, this value 
								// used in new session index. It must - 1 .
}

int CCheckAcl::DeleteSession(SOCKET s)
{
	ODS("XFILTER.DLL: Delete Session...");

	EnterCriticalSection(&m_csSession);
	{
		for(int i = 0; i < m_SessionCount; i++)
		{
			if(m_Session[i].s == s)
			{
				SendSessionToApp(m_Session + i);

				memcpy(m_Session + i, m_Session + i + 1, (m_SessionCount - i - 1) * SESSION_LENTH);

				break;
			}
		}

		if(i >= m_SessionCount)
		{
			LeaveCriticalSection(&m_csSession);
			return XERR_SESSION_NOT_EXISTS;
		}

		m_SessionCount -- ;
	}
	LeaveCriticalSection(&m_csSession);

	DP1("Session Count: %u\n", m_SessionCount);

	return XERR_SUCCESS;
}

int CCheckAcl::SetSession(SESSION *session, BYTE bDirection, UINT uiPort, DWORD ulRemoteIP)
{
	if(session->bProtocol == ACL_SERVICE_TYPE_TCP)
	{
		if(uiPort == ACL_SERVICE_PORT_FTP)
			session->bProtocol = ACL_SERVICE_TYPE_FTP;
		else if(uiPort == ACL_SERVICE_PORT_HTTP1 || uiPort == ACL_SERVICE_PORT_HTTP2)
			session->bProtocol = ACL_SERVICE_TYPE_HTTP;
		else if(uiPort == ACL_SERVICE_PORT_TELNET)
			session->bProtocol = ACL_SERVICE_TYPE_TELNET;
		else if(uiPort == ACL_SERVICE_PORT_NNTP)
			session->bProtocol = ACL_SERVICE_TYPE_NNTP;
		else if(uiPort == ACL_SERVICE_PORT_POP3)
			session->bProtocol = ACL_SERVICE_TYPE_POP3;
		else if(uiPort == ACL_SERVICE_PORT_SMTP)
			session->bProtocol = ACL_SERVICE_TYPE_SMTP;
	}

	session->bDirection		= bDirection;
	session->uiPort			= uiPort;
	session->ulRemoteIP		= htonl(ulRemoteIP);

#if _DEBUG
	CString sOut;
	sOut.Format(_T("SOCKET: %u, Process: %s, Direction: %s, Protocol: %s:%u, Start Time: %s, Port: %u, Remote IP Address: %s"), 
		session->s,
		session->sPathName,
		GUI_DIRECTION[session->bDirection],
		GUI_SERVICE_TYPE[session->bProtocol], session->bProtocol,
		session->tStartTime.Format(_T("%Y-%m-%d %H:%M:%S")),
		session->uiPort,
		CXCommon::DIPToSIP(&session->ulRemoteIP)
		);
	ODS(sOut);
#endif

	return XERR_SUCCESS;
}

int CCheckAcl::SetSessionEx(SESSION *session, BYTE bDirection, const TCHAR *pMemo, int ByteCount, BOOL isSend)
{
	if(session->ulLocalIP == 0)
	{
		SOCKADDR_IN			inetAddr;
		int					nNameLength	= sizeof(inetAddr);

		if(getsockname(session->s, (SOCKADDR*)&inetAddr, &nNameLength) == 0)
		{
			session->uiLocalPort = ntohs(inetAddr.sin_port);

			memcpy(&session->ulLocalIP, &inetAddr.sin_addr, 4);
			session->ulLocalIP	= htonl(session->ulLocalIP);
		}
	}

	if(bDirection != ACL_DIRECTION_NOT_SET && session->bDirection != bDirection)
		session->bDirection		= bDirection;

	if(pMemo != NULL && session->sMemo[0] == '\0' )
		_tcscpy(session->sMemo, pMemo);

	if(ByteCount > 0)
	{
		if(isSend)
			session->ulSendData += ByteCount;
		else
			session->ulRecvData += ByteCount;
	}

	return XERR_SUCCESS;
}

int CCheckAcl::FindSession(SOCKET s)
{
	int		i;

	for(i = 0; i < m_SessionCount; i++)
		if(m_Session[i].s == s)
			break;

	return i;
}

int CCheckAcl::FinallySession()
{
	ODS(_T("XFILTER.DLL: FinallySession ..."));

	for(int i = 0; i < m_SessionCount; i ++)
		SendSessionToApp(m_Session + i);

	return XERR_SUCCESS;
}

int CCheckAcl::SendSessionToApp(SESSION *session)
{
#if !defined(_DEBUG)

	if(IsLocalIP(&session->ulRemoteIP))
		return XERR_SUCCESS;

#endif

	if(m_GuiHwnd != NULL && m_AclFile.mAclHeader.sSignature[0] != 0)
	{
		int		iIndex;

		for(iIndex = 0; iIndex < MAX_SESSION_BUFFER; iIndex++)
		{
			if(m_SessionBuf[iIndex].s == 0)
			{
				session->tEndTime = CTime::GetCurrentTime();
				m_SessionBuf[iIndex] = *session;
				break;
			}
		}

		//
		// 2001-12-24 修改,增加對PostMessage的錯誤判斷,如果發送失敗
		// 直接設置緩沖區標志為無效,丟棄封包往應用程序的發送
		//
		if(iIndex < MAX_SESSION_BUFFER
			&& !::PostMessage(m_GuiHwnd, WM_SESSION_NOTIFY, iIndex, NULL))
			m_SessionBuf[iIndex].s = 0;
	}

#if _DEBUG
	
	CString  tmpStr;

	tmpStr.Format(
		_T("SOCKET: %u, Action: %s, Direction: %s, Protocol: %s, Start Time: %s, End Time: %s,\
		Local Port: %u, Remotoe Port: %u, Local IP Address: %s, Remote IP Address: %s,\
		In amount data: %u, Out amout Data: %u, \nMemo: %s, sProcess: %s"), 
		session->s,
		GUI_ACTION[session->bAction],
		GUI_DIRECTION[session->bDirection],
		GUI_SERVICE_TYPE[session->bProtocol],
		session->tStartTime.Format(_T("%Y-%m-%d %H:%M:%S")),
		CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")),
		session->uiLocalPort,
		session->uiPort,
		CXCommon::DIPToSIP(&session->ulLocalIP),
		CXCommon::DIPToSIP(&session->ulRemoteIP),
		session->ulSendData,
		session->ulRecvData,
		session->sMemo,
		session->sPathName
		);

	ODS(tmpStr);

#endif
	
	session->sMemo[0]		= '\0';
	session->ulRecvData		= 0;
	session->ulSendData		= 0;

	return XERR_SUCCESS;
}

//=============================================================================================
// check the hook function, set session value and return access info.

int CCheckAcl::CheckStartup()
{
	if(m_iWorkMode != XF_QUERY_ALL 
		|| _tcscmp(m_sGuiPathName, m_sProcessName) == 0
		|| m_AclFile.mAclHeader.sSignature[0] == 0
		)
		return XF_PASS;

	if(m_sProcessName[0] == 0)
		return XERR_ACCESS_INVALID_PROCESS;

 	DWORD iIndex = FindAcl(m_sProcessName, 0);

	if(iIndex >= m_AclFile.mAclHeader.ulAclCount)
		return XF_QUERY;

	return XF_PASS;
}

void CCheckAcl::CheckSocket(SOCKET s, int af, int type, int protocol)
{
	if (af != AF_INET)
		return;

	WORD			wProtocol	= ACL_SERVICE_TYPE_ALL;	

	if (protocol == IPPROTO_IP)
	{
		if (type == SOCK_STREAM)
			wProtocol = ACL_SERVICE_TYPE_TCP;
		else if (type == SOCK_DGRAM)
			wProtocol = ACL_SERVICE_TYPE_UDP;
	}
	else if (protocol == IPPROTO_TCP)
		wProtocol	= ACL_SERVICE_TYPE_TCP;
	else if (protocol == IPPROTO_UDP)
		wProtocol	= ACL_SERVICE_TYPE_UDP;

	CreateSession(s, wProtocol);
}

void CCheckAcl::CheckCloseSocket(SOCKET s)
{
	DeleteSession(s);
}

int CCheckAcl::CheckConnect(SOCKET s, const struct sockaddr FAR *name, int namelen)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;
	
	SOCKADDR_IN	*pInetAddr	= (SOCKADDR_IN*)name;
	WORD		wPort		= ntohs(pInetAddr->sin_port);
	DWORD		*pRemoteIp	= (DWORD*)&pInetAddr->sin_addr;

	SetSession(m_Session + iIndex, ACL_DIRECTION_OUT, wPort, *pRemoteIp);

	return GetAccessInfo(m_Session + iIndex);
}

int  CCheckAcl::CheckAccept(SOCKET s, SOCKET news)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	if((iIndex = CreateSession(news, ACL_SERVICE_TYPE_TCP)) == XERR_SESSION_ALREDAY_EXISTS)
		return XF_PASS;
	
	SOCKADDR_IN		addr;
	int				addrlen	= sizeof(addr);
	DWORD			ulRemoteIp;

	getpeername(news, (SOCKADDR*)&addr, &addrlen);
	memcpy(&ulRemoteIp, &addr.sin_addr, 4);
	getsockname(news, (SOCKADDR*)&addr, &addrlen);

	if (SetSession(m_Session + iIndex, ACL_DIRECTION_IN, ntohs(addr.sin_port), ulRemoteIp) != XERR_SUCCESS)
		return XF_PASS;

	return GetAccessInfo(m_Session + iIndex);
}

int CCheckAcl::CheckSend(SOCKET s, TCHAR *buf, int len, LPDWORD lpNumberOfBytesSent)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesSent, TRUE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, TRUE);

	return GetAccessInfo(m_Session + iIndex);
}

int	CCheckAcl::CheckSendTo(SOCKET s, const SOCKADDR *pTo, TCHAR *buf, int len, LPDWORD lpNumberOfBytesSent)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	if (pTo != NULL && m_Session[iIndex].bProtocol == ACL_SERVICE_TYPE_UDP )
	{
		SOCKADDR_IN	*pAddr			= (SOCKADDR_IN*)pTo;
		DWORD		*pRemoteIp		= (DWORD*)&pAddr->sin_addr;

		SetSession(m_Session + iIndex, ACL_DIRECTION_OUT, ntohs(pAddr->sin_port), *pRemoteIp);
	}

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesSent, TRUE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, TRUE);

	return GetAccessInfo(m_Session + iIndex);
}

int CCheckAcl::CheckRecv(SOCKET s, TCHAR *buf, int len, LPDWORD lpNumberOfBytesRecvd)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesRecvd, FALSE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, FALSE);

	return GetAccessInfo(m_Session + iIndex);
}

int CCheckAcl::CheckRecvFrom(SOCKET s, SOCKADDR *pFrom, TCHAR *buf, int len, LPDWORD lpNumberOfBytesRecvd)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	if (pFrom != NULL && m_Session[iIndex].bProtocol == ACL_SERVICE_TYPE_UDP)
	{
		SOCKADDR_IN			*pInetAddr	= (SOCKADDR_IN*)pFrom;
		DWORD				*pRemoteIp	= (DWORD*)&pInetAddr->sin_addr;

		SetSession(m_Session + iIndex, ACL_DIRECTION_IN, ntohs(pInetAddr->sin_port), *pRemoteIp); 
	}

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesRecvd, FALSE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, FALSE);

	return GetAccessInfo(m_Session + iIndex);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区在线观看免费| 国产69精品一区二区亚洲孕妇| 麻豆91精品视频| 成人国产精品免费观看| 欧美精品久久天天躁| 国产精品久久久久一区二区三区 | 久久精品国产77777蜜臀| 99热国产精品| 国产日韩视频一区二区三区| 日韩黄色免费电影| 色综合久久88色综合天天| 久久精品视频一区| 视频一区二区欧美| 精品视频一区二区三区免费| 国产精品毛片无遮挡高清| 国产真实精品久久二三区| 日韩视频免费观看高清完整版 | aa级大片欧美| 久久午夜电影网| 香蕉成人伊视频在线观看| 欧洲在线/亚洲| 亚洲精品免费在线观看| 色偷偷88欧美精品久久久| 亚洲私人黄色宅男| 99久久综合狠狠综合久久| 日本一区二区成人| 成人免费黄色在线| 国产精品乱码一区二区三区软件| 国产精品亚洲а∨天堂免在线| 精品蜜桃在线看| 极品少妇一区二区三区精品视频| 欧美电影免费观看高清完整版 | 一本一本大道香蕉久在线精品 | 国产精品污www在线观看| 麻豆专区一区二区三区四区五区| 精品视频全国免费看| 亚洲国产精品一区二区久久恐怖片 | 91小视频免费看| 亚洲麻豆国产自偷在线| 91丝袜美女网| 亚洲摸摸操操av| 欧美日韩高清一区二区三区| 丝袜美腿高跟呻吟高潮一区| 日韩精品中文字幕一区二区三区| 久久精品国产亚洲aⅴ| wwwwww.欧美系列| 成人h精品动漫一区二区三区| 亚洲欧洲日韩av| 欧美日韩性生活| 韩国女主播一区二区三区| 欧美激情一区不卡| 欧美在线999| 日韩精品91亚洲二区在线观看| 日韩精品自拍偷拍| 成人av电影免费观看| 亚洲一区日韩精品中文字幕| 51久久夜色精品国产麻豆| 国产在线精品一区二区三区不卡| 国产精品毛片久久久久久| 欧美日韩视频专区在线播放| 另类小说欧美激情| 亚洲日本在线看| 精品免费国产二区三区 | 亚洲另类春色国产| 欧美一区二区在线不卡| 成人午夜在线播放| 亚洲成人精品在线观看| 国产午夜精品久久久久久免费视| 91国偷自产一区二区开放时间| 久久精品国产第一区二区三区| 国产精品不卡一区二区三区| 日韩一区二区三区在线观看| 成人av在线影院| 蜜芽一区二区三区| 一区二区三区在线观看动漫| 亚洲精品一区二区三区在线观看| 一本一道久久a久久精品| 国精产品一区一区三区mba视频| 一区二区久久久久久| 久久综合九色综合97婷婷| 欧美男男青年gay1069videost| 粉嫩13p一区二区三区| 蜜桃一区二区三区在线| 亚洲自拍另类综合| 国产精品久久久一本精品 | 日韩免费视频一区二区| 91亚洲国产成人精品一区二三| 狠狠久久亚洲欧美| 日韩激情av在线| 亚洲成va人在线观看| 亚洲素人一区二区| 国产精品视频看| 国产日韩在线不卡| 2021久久国产精品不只是精品| 欧美年轻男男videosbes| 色综合色狠狠天天综合色| 成人精品视频.| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩精品在线看片z| 欧美高清视频一二三区 | 亚洲欧美激情小说另类| 国产日产欧美一区| 久久一二三国产| 精品日韩99亚洲| 337p粉嫩大胆噜噜噜噜噜91av| 91精品国产综合久久精品app| 欧美亚洲自拍偷拍| 欧美三区在线观看| 欧美日韩免费在线视频| 欧美亚洲自拍偷拍| 欧美日韩视频在线第一区| 欧美色老头old∨ideo| 欧美唯美清纯偷拍| 欧美日韩国产经典色站一区二区三区 | 青青草一区二区三区| 日韩精品久久久久久| 日韩福利电影在线观看| 日本美女一区二区三区视频| 日日夜夜一区二区| 日本不卡一区二区| 久久精品国产精品亚洲精品 | 国产欧美精品国产国产专区| 国产精品久久久一本精品| 亚洲三级在线免费观看| 亚洲在线视频免费观看| 青青草原综合久久大伊人精品 | 色诱亚洲精品久久久久久| 色吧成人激情小说| 欧美探花视频资源| 日韩视频一区二区在线观看| 日韩免费观看2025年上映的电影| 精品少妇一区二区三区免费观看 | 日韩欧美亚洲另类制服综合在线| 日韩精品资源二区在线| 国产丝袜欧美中文另类| 亚洲男同性恋视频| 免费的成人av| av一区二区三区黑人| 欧美亚洲国产一区在线观看网站 | 欧美色视频在线| www激情久久| 亚洲精品成a人| 裸体健美xxxx欧美裸体表演| 不卡的av中国片| 日韩小视频在线观看专区| 中文字幕乱码亚洲精品一区| 亚洲成人三级小说| 懂色av中文一区二区三区 | 国产精品毛片久久久久久久| 亚洲在线成人精品| 国产精品1区2区3区在线观看| 色综合夜色一区| 欧美精品一区二区久久久| 最新热久久免费视频| 捆绑调教一区二区三区| 色婷婷综合久久久久中文| 精品国精品国产| 亚洲一二三四区不卡| 国产91丝袜在线播放| 欧美肥妇毛茸茸| 亚洲欧美日韩国产综合| 国产一区欧美一区| 欧美日韩激情一区| 亚洲人成网站在线| 国产成人精品亚洲午夜麻豆| 欧美精品久久久久久久久老牛影院| 国产精品国产三级国产普通话蜜臀 | 久久久精品免费网站| 五月婷婷色综合| 色婷婷久久久久swag精品 | 欧美激情一区在线观看| 日本在线播放一区二区三区| 97se亚洲国产综合自在线| 久久久五月婷婷| 麻豆成人91精品二区三区| 欧美三级在线视频| 亚洲美女视频一区| 成人h动漫精品一区二区| 久久久一区二区三区捆绑**| 日本中文字幕一区二区有限公司| 91免费视频网| 亚洲欧洲av一区二区三区久久| 国产乱妇无码大片在线观看| 精品国产网站在线观看| 裸体健美xxxx欧美裸体表演| 欧美肥大bbwbbw高潮| 亚洲欧美日韩久久精品| 91年精品国产| 一区二区三区在线视频免费 | aaa亚洲精品| 国产精品免费久久久久| 成人h动漫精品| 亚洲欧美另类在线| 色8久久精品久久久久久蜜| 亚洲人成在线观看一区二区| 色婷婷国产精品综合在线观看| 亚洲免费观看高清完整版在线 | 99在线视频精品| 国产精品不卡一区二区三区| a4yy欧美一区二区三区|