⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appip.cpp

📁 linux 上http email 协议分析程序 主要能够处理大数据量的主干网的应用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		return ;
		
	printf("tkong[%s]\n",szbuf);
	TLog::toErr("[%s]\n",szbuf);
	if((p=strtok(szbuf,"? "))==NULL)
		return;
	
	if(strlen(p)>=16)
		return ;
	strcpy(m_szmethod,p);
	if(strcasecmp(m_szmethod,"GET")!=0 && 
	   strcasecmp(m_szmethod,"POST")!=0)
		return ;
	
	if((p=strtok(NULL,"? "))==NULL)
		return ;
	
	if(strlen(p)>=256)
	{
		printf("error url[%s]\n",p);
		TLog::toErr("err url=[%s]",p);
		return ;
	}
	strcpy(m_szurl,p);

	/*appip 不加么默认的后缀
		if(m_szurl[strlen(m_szurl)-1]=='/')
	{
		strcat(m_szurl,"index.html");
	}*/
	
	*m_szhost=0;
	*m_szpostpara=0;
	if(strcasecmp(m_szmethod,"get")==0)
	{
		if((p=strtok(NULL,"? "))!=NULL)
		{
			if(strcasecmp(p,"HTTP/1.1"))
				strcpy(m_szpostpara,p);
		}
	}
	
	m_pinqhv->clear();		
	m_pinqhv->setValues(m_theinqStream);
		
	p=m_pinqhv->getValue("Host");
	if(p!=NULL)
			strcpy(m_szhost,p);
		
	if(strcasecmp(m_szmethod,"post")==0)
	{
		char *ppost=m_theinqStream->getCurPos();
		int lenpost=lendata-(ppost-szdata);
		if(lenpost>0 && lenpost<sizeof(m_szpostpara)-1)
		{
			memcpy(m_szpostpara,ppost,lenpost);
			m_szpostpara[lenpost]=0;
		}
	}

	memcpy(szbuf,m_theinqStream->getCurPos(),80);

	printf("post para is [%s]\n",m_szpostpara);
	TLog::toErr("[%s]\n",m_szpostpara);
}

/*bool CAppHttp::availContType()
{
	
	if(strcasecmp(m_szmethod,"POST")==0)
	{
		char *p=m_pinqhv->getValue("Content-Type");
		if(p!=NULL)
		{
			//TLog::toLog("inqContent-Type=[%s]\n",p);
		}
		m_idataflow=0;
		return true;
	}
	else if(strcasecmp(m_szmethod,"GET")==0)
	{
		char *p=m_prethv->getValue("Content-Type");
		if(p!=NULL)
		{
			//TLog::toLog("retContent-Type=[%s]\n",p);
			m_idataflow=1;
			if(strncasecmp(p,"text/html",9)==0)
			{
				return true;
			}
		}
		return false;

	}
	return false;
}
*/

void CAppIp::writeTKongPage(int lendata)
{
	STRU_TR_T_SPESENPAGE recpage;
	struct in_addr inaddr;
	
	recpage.SSP_ID=m_pspseqweb->getS_TR_T_SPESENPAGE();
		
	if(strlen(m_szurl)<sizeof(recpage.SSP_PAGEPOSITION))
		strcpy(recpage.SSP_PAGEPOSITION,m_szurl);
	else
	{
		memcpy(recpage.SSP_PAGEPOSITION,m_szurl,sizeof(recpage.SSP_PAGEPOSITION)-1);
		recpage.SSP_PAGEPOSITION[sizeof(recpage.SSP_PAGEPOSITION)-1]=0;
	}

	if(strlen(m_szhost)<sizeof(recpage.SSP_DOMAINNAME))
		strcpy(recpage.SSP_DOMAINNAME,m_szhost);
	else
	{
		memcpy(recpage.SSP_DOMAINNAME,m_szhost,sizeof(recpage.SSP_DOMAINNAME)-1);
		recpage.SSP_DOMAINNAME[sizeof(recpage.SSP_DOMAINNAME)-1]=0;
	}

	inaddr.s_addr = m_piph->saddr;
	sprintf(recpage.SSP_CLIENTIP,"%s",inet_ntoa(inaddr));
	inaddr.s_addr = m_piph->daddr;
	sprintf(recpage.SSP_SERVERIP,"%s",inet_ntoa(inaddr));
	
	strcpy(recpage.SSP_CAPTIME,TUTime::YYYYMMDDHHMMSS());
	
	recpage.SSP_DATAFLOW=0;
	
	recpage.SSP_RESOURCELENGTH=lendata;	
	
	strcpy(recpage.SSP_CLNTCALLID,"-");
	
	m_pInfo->getAccount(m_piph->saddr, recpage.SSP_CLNTACCOUNT,recpage.SSP_CLNTCALLID);
	m_pInfo->getLocation(m_piph->saddr, recpage.SSP_CLNTLOCATION);
		
	TLog::toErr("radius %u %s %s",ntohl(m_piph->saddr),recpage.SSP_CLNTACCOUNT,recpage.SSP_CLNTCALLID);

	recpage.SSP_HASSUBMIT=0;
	recpage.SSP_SPEINFOSTATUS=1;
	
	m_psptblweb->insRecord(&recpage);
}

void CAppIp::registerWatchedObj()
{
	ST_AIMOBJ stObj[32];
	int iobjs=m_prdsip.isInWatched(m_piph->saddr,stObj);

	for(int i=0;i<iobjs;i++)
	{
		STRU_TR_T_OBJECT2INFO rec;
		
		rec.OTI_ID=m_pSeqSpWarm->getS_TR_T_OBJECT2INFO();
		rec.AMG_ID=stObj[i].amgid;
		rec.OTI_INFOID=m_pspseqweb->getfkS_TR_T_SPESENPAGE();
		rec.OTI_INFOTYPE=2;
		rec.OTI_RPRECISION=stObj[i].precision;
		rec.OTI_READSTATUS=1;
		m_pTblSpWarm->insRecord(&rec);
	}
}	

void CAppIp::registerContent()
{
	bool bupd=false;
	char szbuf[1024];
	char *p;
	
	STRU_TR_T_SPESUBMITCONTENT rec;
	
	if(*m_szpostpara==0)
		return;
	if(strlen(m_szpostpara)>=sizeof(szbuf)-1)
		return;

	strcpy(szbuf,m_szpostpara);
	p=strtok(szbuf,"&");
	//	return;

	do
	{
		TLog::toErr("submit=[%s]\n",p);
		char *pv=strchr(p,'=');
		if(pv==NULL)
			break;

		int len=pv-p;
		memcpy(rec.SSB_FIELDNAME,p,len);
		rec.SSB_FIELDNAME[len]=0;

		pv++;
		strcpy(rec.SSB_FIELDVALUE,pv);
		
		rec.SSB_ID=m_pspseqweb->getS_TR_T_SPESUBMITCONTENT();
		rec.SSP_ID=m_pspseqweb->getfkS_TR_T_SPESENPAGE();
		m_psptblweb->insRecord(&rec);
		bupd=true;
		p=strtok(NULL,"&");
	}while(p!=NULL);
	
	if(bupd)
		m_psptblweb->updateSPESUBMIT(m_pspseqweb->getfkS_TR_T_SPESENPAGE());
}


void CAppIp::processFKong(u_int32_t ip,	char *szdata,int lendata)
{
	m_bmatch=false;
	for(int icurcfg=0;icurcfg<m_totipcfg;icurcfg++)
	{
		
		if((m_pipcfg+icurcfg)->option=='1')
		{
			if((m_pipcfg+icurcfg)->ip==ip)
				m_bmatch=true;
		}
		else
		{
			char *ptr=TU::searchKey(szdata, lendata,(m_pipcfg+icurcfg)->szpost );
			if(ptr!=NULL)
			{
				char *ptr=TU::searchKey(szdata, lendata,(m_pipcfg+icurcfg)->szdomain );
				if(ptr!=NULL)
				{
					m_bmatch=true;
				}
			}	
				
		}
		
		if(m_bmatch)
		{
			printf("*********************this is fankong**********************\n");
			char *ptr=TU::searchKey(szdata, lendata,(m_pipcfg+icurcfg)->szdomain );
            if(ptr!=NULL)
			{
				char *ptre=strchr(ptr,'&');
				if(ptre==NULL)
					return;
									
				{
					char filename[128];
					if(!getIpFileName(filename))
						return;
					writeIpFile(filename,szdata,lendata);
					writeFKongPage(lendata,filename,(m_pipcfg+icurcfg)->szurl,(m_pipcfg+icurcfg)->wapid);
				}
			}
			
			
			char *pcurdomain=(m_pipcfg+icurcfg)->szdomain;
			for(int j=0;j<(m_pipcfg+icurcfg)->inumdomain;j++)
			{
				pcurdomain+=32*j;
				printf("search [%s]\n",pcurdomain);
				char *ptr=TU::searchKey(szdata, lendata,pcurdomain );
				if(ptr!=NULL)
				{
					char *ptre=strchr(ptr,'&');
					if(ptre!=NULL)
					{
						STRU_TR_T_SUBMITCONTENT rec;
						strcpy(rec.SBC_FIELDNAME,pcurdomain );
						memcpy(rec.SBC_FIELDVALUE,ptr,ptre-ptr);
						rec.SBC_FIELDVALUE[ptre-ptr]=0;
						rec.SBC_ID=m_pseqweb->getS_TR_T_SUBMITCONTENT();
						rec.SPG_ID=m_pseqweb->getfkS_TR_T_SENPAGE();
						printf("%d %d %s %s \n",rec.SBC_ID,rec.SPG_ID,rec.SBC_FIELDNAME,rec.SBC_FIELDVALUE);
						m_ptblweb->insRecord(&rec);
					}
				}
			}
		}
	}
}

void CAppIp::processFKongDB(u_int32_t ip,	char *szdata,int lendata)
{
	char *ptr;
	for(int icurcfg=0;icurcfg<m_totipcfg;icurcfg++)
	{
		m_bmatch=false;
		ptr=TU::searchKey(szdata, lendata,(m_pipcfgdb+icurcfg)->szurl );
		if(ptr)
		{
			ptr=TU::searchKey(szdata, lendata,(m_pipcfgdb+icurcfg)->szhost );
			if(ptr)
			{
				m_bmatch=true;
			}
		}	
				
		if(!m_bmatch)
			continue;
		
		//printf("*********************this is fankong**********************\n");
		ptr=TU::searchKey(szdata, lendata,(m_pipcfgdb+icurcfg)->szdomain );
    		if(ptr!=NULL)
		{
			char *ptre=strchr(ptr,'&');
			if(ptre==NULL)
					return;
			else					
			{
				char filename[128];
				if(!getIpFileName(filename))
						return;
				writeIpFile(filename,szdata,lendata);
				writeFKongPage(lendata,filename,(m_pipcfgdb+icurcfg)->szurl,(m_pipcfgdb+icurcfg)->wapid);
			}
			
			char *pcurdomain=(m_pipcfgdb+icurcfg)->szdomain;
			for(int j=0;j<(m_pipcfgdb+icurcfg)->inumdomain;j++)
			{
				pcurdomain+=64*j;
				printf("search [%s]\n",pcurdomain);
				char *ptr=TU::searchKey(szdata, lendata,pcurdomain );
				if(ptr!=NULL)
				{
					char *ptre=strchr(ptr,'&');
					if(ptre!=NULL)
					{
						STRU_TR_T_SUBMITCONTENT rec;
						strcpy(rec.SBC_FIELDNAME,pcurdomain );
						memcpy(rec.SBC_FIELDVALUE,ptr,ptre-ptr);
						rec.SBC_FIELDVALUE[ptre-ptr]=0;
						rec.SBC_ID=m_pseqweb->getS_TR_T_SUBMITCONTENT();
						rec.SPG_ID=m_pseqweb->getfkS_TR_T_SENPAGE();
						printf("%d %d %s %s \n",rec.SBC_ID,rec.SPG_ID,rec.SBC_FIELDNAME,rec.SBC_FIELDVALUE);
						m_ptblweb->insRecord(&rec);
					}
				}
			}//end of all domain
		}
		return;
	}//end of for
}



bool CAppIp::getIpFileName(char *filename)
{
	struct in_addr inaddr;
	
	inaddr.s_addr = m_piph->saddr;
	sprintf(filename,"%s/%s:%d:","../iplog",inet_ntoa(inaddr),ntohs(m_ptcph->source));
	
	inaddr.s_addr = m_piph->daddr;
	sprintf(filename+strlen(filename),"%s:%d",inet_ntoa(inaddr),ntohs(m_ptcph->dest));

	TLog::toLog("%s\n",filename);
	return true;	
}

bool CAppIp::writeIpFile(char *filename,char *data,int lendata)
{
	ofstream *pofslog= new ofstream(filename,ios::trunc);

	for(int i=0;i<lendata;i++)
			*pofslog<<data[i];
	//printf("flush\n");
	pofslog->flush();
	//printf("close\n");
	pofslog->close();
	
	delete pofslog;
	return true;
}


void CAppIp::writeFKongPage(int lendata,char *filename,char *szurl,int wapid)
{
	STRU_TR_T_SENPAGE recpage;
	struct in_addr inaddr;
	
	recpage.ACT_ID=0;
	recpage.WAP_ID=wapid;
	recpage.SPG_ID=m_pseqweb->getS_TR_T_SENPAGE();
			

	if(strlen(filename)<sizeof(recpage.SPG_PAGEPOSITION))
		strcpy(recpage.SPG_PAGEPOSITION,filename);
	else
	{
		memcpy(recpage.SPG_PAGEPOSITION,filename,sizeof(recpage.SPG_PAGEPOSITION)-1);
		recpage.SPG_PAGEPOSITION[sizeof(recpage.SPG_PAGEPOSITION)-1]=0;
	}
	if(strlen(szurl)<sizeof(recpage.SPG_DOMAINNAME))
		strcpy(recpage.SPG_DOMAINNAME,szurl);
	else
	{
		memcpy(recpage.SPG_DOMAINNAME,szurl,sizeof(recpage.SPG_DOMAINNAME)-1);
		recpage.SPG_DOMAINNAME[sizeof(recpage.SPG_DOMAINNAME)-1]=0;
	}
	
	inaddr.s_addr = m_piph->saddr;
	sprintf(recpage.SPG_CLIENTIP,"%s",inet_ntoa(inaddr));
	inaddr.s_addr = m_piph->daddr;
	sprintf(recpage.SPG_SERVERIP,"%s",inet_ntoa(inaddr));
	
	strcpy(recpage.SPG_CAPTIME,TUTime::YYYYMMDDHHMMSS());
	
	recpage.SPG_DATAFLOW=0;
	
	recpage.SPG_RESOURCELENGTH=lendata;	
	
	strcpy(recpage.SPG_CLNTCALLID,"-");
	m_pInfo->getAccount(m_piph->saddr, recpage.SPG_CLNTACCOUNT,recpage.SPG_CLNTCALLID);
	m_pInfo->getLocation(m_piph->saddr, recpage.SPG_CLNTLOCATION);
		
	recpage.SPG_HASSUBMIT=1;
	recpage.SPG_SPEINFOSTATUS=1;
	
	m_ptblweb->insRecord(&recpage);

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -