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

📄 checksmtp.c

📁 我的本科生毕业设计
💻 C
字号:
#include "checkSMTP.h"#include "reportToConsole.h"/*this file must all modifye TODO:*/int SMTPSockFd[MaxSMTPUrl];long long SMTPsendPacket[MaxSMTPUrl];long long SMTPrecvPacket[MaxSMTPUrl];char STMPprotocolPacket[MAX_PACKET];int SMTPaSendNum;int SMTPaRecvNum;time_t SMTPsTime,SMTPeTime;fd_set SMTPreadSet,SMTPtestSet;char SMTPtmpcheck[100];extern FILE *SMTPLogFd;void SMTPanalysis(){	int i;	float rate;	int downNum = 0;	int notSmoothNum = 0;	int wellNum = 0;	for (i = 0;i < SMTPUrlNum;i++)	{		if (SMTPSockFd[i] != -1)		{				rate =(float) SMTPrecvPacket[i]/SMTPsendPacket[i];/*  rate of pocket recv */			if (rate < RATE_LEVEL)			{				notSmoothNum++;				sprintf(SMTPtmpcheck,"[WARNING] SMTP server:%s is not smooth;the rate is %f\n",SMTPUrl[i],rate);				display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd);			}			else			{				wellNum++;				sprintf(SMTPtmpcheck,"[OK] SMTP server:%s is well,the rate is:%f\n",SMTPUrl[i],rate);				display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd);			}		}		else			wellNum++;	}	if (SMTPServFd != -1)		reportToConsole("SMTP",SMTPServFd,downNum,notSmoothNum,wellNum);}int SMTPsearchFd(int fd){	int i;	for (i = 0;i < SMTPUrlNum;i++)	{		if (fd == SMTPSockFd[i])			break;	}	return i;}void SMTPnewSockFd(){	int i;	for (i = 0;i < SMTPUrlNum;i++)	{		close(SMTPSockFd[i]);		servConnect(SMTPUrl[i],&(SMTPSockFd[i]),SMTPPort,textSMTPBuff,SMTPLogFd); 	}}void SMTPmkSendPacket(){	int i;	bzero(&STMPprotocolPacket,sizeof(STMPprotocolPacket));	genSMTPPacket(SMTPUrl[0],STMPprotocolPacket);}void SMTPsendData(){	int i;	SMTPaSendNum = 0;	for (i = 0;i < SMTPUrlNum;i++)		{			if (SMTPSockFd[i] != -1)			{				int res;				int sendBuffSize = strlen(STMPprotocolPacket);				res = write(SMTPSockFd[i],STMPprotocolPacket,sendBuffSize); /* no block */				if (res == -1) 				{					//perror("write");					close(SMTPSockFd[i]);					FD_CLR(SMTPSockFd[i],&SMTPtestSet);					FD_CLR(SMTPSockFd[i],&SMTPreadSet);					continue;				}				else  				{					SMTPaSendNum++;					SMTPsendPacket[i]++;				}			}		}}void SMTPselectHandle(){	char recvBuff[256];	int fd;	for (fd = 0;fd < FD_SETSIZE;fd++)	{		if (FD_ISSET(fd,&SMTPtestSet))		{			SMTPaRecvNum++;			int nread;			ioctl(fd,FIONREAD,&nread);			if (nread == 0)			{				sprintf(SMTPtmpcheck,"[FAILURE] SMTP server connect close\n");				display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd);			}			else			{				int recvBuffSize = strlen(recvBuff);				read(fd,recvBuff,recvBuffSize);  		/*		int res;				res = analysPacket(recvBuff);				if (res == 1)				{					 int id;					  determine the id which socket fd is sockfd						   SMTPrecvPacket[id]++;				}*/				int id;				id = SMTPsearchFd(fd);				SMTPrecvPacket[id]++;				sprintf(SMTPtmpcheck,"[MESSAGE] SMTP server: %s send %lld packets,and receive %lld packets\n",						SMTPUrl[id],SMTPsendPacket[id],SMTPrecvPacket[id]);				display(textSMTPBuff,SMTPtmpcheck,SMTPLogFd);			}			close(fd);			FD_CLR(fd,&SMTPreadSet);		}	}}void  SMTPresetSet(){	int i;	FD_ZERO(&SMTPreadSet);	for (i = 0;i < SMTPUrlNum;i++)	{		if (SMTPSockFd[i] != -1)			FD_SET(SMTPSockFd[i],&SMTPreadSet);	}}void SMTPhandle(){	time_t s_t,e_t;	int i;	struct timeval timeOut;	SMTPnewSockFd(); /*make the SMTP url connect*/	SMTPresetSet(); 	/*add the socket to the readset*/	SMTPaRecvNum = 0;	SMTPsendData();	s_t = time((time_t*)0);	while (1)	{		SMTPtestSet = SMTPreadSet;		timeOut.tv_sec = SELECT_TIME_SEC;		timeOut.tv_usec = SELECT_TIME_USEC; /* time out is 1 second */		int res;		res = select(FD_SETSIZE,&SMTPtestSet,(fd_set*)NULL,(fd_set*)NULL,&timeOut);		switch(res)		{			case 0 ://				printf("time out\n");				break;			case -1 ://				printf("smtp select\n");				break;//				exit(-1);			default :				SMTPselectHandle();				s_t = time((time_t*)0);				break;		}		e_t = time((time_t*)0);		double diff_t;		diff_t = difftime(e_t,s_t);		if (SMTPaRecvNum >= SMTPaSendNum || diff_t > RECV_TIME_OUT )  /*time  controll*/			break;	}}void checkSMTP(){	int i ;	for (i = 0;i <SMTPUrlNum;i++)		SMTPsendPacket[i] = SMTPrecvPacket[i] = 0;	SMTPsTime = time((time_t*)0);	SMTPmkSendPacket();	while (running)	{		SMTPhandle();		SMTPeTime = time((time_t*)0);		double diffTime;		diffTime = difftime(SMTPeTime,SMTPsTime);		if (diffTime >= CHECK_TIME_VAL)  /* check between CHECK_TIME_VAL*/		{			SMTPsTime = SMTPeTime;			SMTPanalysis(); /*  analays 	the 		all		 socket */		}		sleep(1);	}}

⌨️ 快捷键说明

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