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

📄 ipa_ctl.c

📁 监控局域网上网
💻 C
📖 第 1 页 / 共 4 页
字号:
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "The white list is empty!\n");
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}


	plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
	if (plist == NULL)
	{
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "calloc() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return -1;
	}
	ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist);
	if (ret < 0)	
	{
		free(plist);
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return -1;
	}
	
	for (i=0; i<whileListLen; i++)
	{
		if (  (strcmp(plist[i].ip, pnode->ip) == 0) &&
		      (strcmp(plist[i].mac, pnode->mac) == 0) &&
		      (strcmp(plist[i].name, pnode->name) == 0)  )
		{
			free(plist);
			pheader->code = htonl(0);
			return 0;
		}
	}
	free(plist);

	pheader->code = htonl(4);
	pos = sizeof(Header_t);
	buf = resp + pos;
	sprintf(buf, "What you input is not in the white list!\n", strerror(errno));
	pos += strlen(buf);
	pos ++;
	pheader->buflen = htonl(pos);
	*resplen = pos;

	return 0;
}


int deal_reset_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
	Header_t  *pheader;
	int   pos;
	char  *buf;
	int   i;
	
	pheader = (Header_t *)resp;
	pheader->buflen = htonl(sizeof(Header_t));
	*resplen = sizeof(Header_t);

	fSemSetPlus(gd_semfd, 0);
	comMkShfn(gd_WHITE_LIST_file, 4,  1);
	i = 0;
	comWriteShfn(gd_WHITE_LIST_file, 0, (char *)&i, 4) ;
	fSemSetSub(gd_semfd, 0);

	pheader->code = htonl(0);
	
	return 0;
}

int deal_reset_ip_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
	Header_t  *pheader;
	int   pos;
	char  *buf;
	int   i;
	
	pheader = (Header_t *)resp;
	pheader->buflen = htonl(sizeof(Header_t));
	*resplen = sizeof(Header_t);

	fSemSetPlus(gd_semfd, 0);
	comMkShfn(gd_IP_LIST_file, 4,  1);
	i = 0;
	comWriteShfn(gd_IP_LIST_file, 0, (char *)&i, 4) ;
	fSemSetSub(gd_semfd, 0);

	pheader->code = htonl(0);
	
	return 0;
}


int deal_print_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
	Header_t  *pheader;
	FILE *fp;
	int   pos;
	char  *buf;
	IP_MAC_NAME_t *plist, *pnode;
	struct stat fbuf;
	char  cmd[256];
	int   i, ret;
	int   whileListLen;
	
	pheader = (Header_t *)resp;
	pheader->buflen = htonl(sizeof(Header_t));
	*resplen = sizeof(Header_t);

	ret = comReadShfn(gd_WHITE_LIST_file, 0, 4, (char *)&whileListLen) ;
	if (ret < 0)	
	{
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}
		
	if (whileListLen < 1)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "The white list is empty!\n");
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(4);
		*resplen = pos;
		return 1;
	}
	plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
	if (plist == NULL)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "calloc() fail[%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(4);
		*resplen = pos;
		return 1;
	}
	ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist) ;
	if (ret < 0)
	{
		free(plist);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail[%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(4);
		*resplen = pos;
		return 1;
	}

	fp = fopen("/tmp/wl.txt", "w");
	if (fp == NULL)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "fopen(\"/tmp/wl.txt\", \"w\") error[%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(3);
		*resplen = pos;
		return 1;
	}
	for (i=0; i<whileListLen; i++)
	{
		fprintf(fp, "%s\t%s\t%s\n", plist[i].ip, plist[i].mac, plist[i].name);
	}
	fclose(fp);
	free(plist);
	pheader->code = htonl(0);
	
	return 0;
}

int deal_print_ip_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
	Header_t  *pheader;
	FILE *fp;
	int   pos;
	char  *buf;
	IP_MAC_NAME_t *plist, *pnode;
	struct stat fbuf;
	char  cmd[256];
	int   i, ret;
	int   ipListLen;
	
	pheader = (Header_t *)resp;
	pheader->buflen = htonl(sizeof(Header_t));
	*resplen = sizeof(Header_t);

	ret = comReadShfn(gd_IP_LIST_file, 0, 4, (char *)&ipListLen) ;
	if (ret < 0)	
	{
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}
		
	if (ipListLen < 1)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "The ip list is empty!\n");
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(4);
		*resplen = pos;
		return 1;
	}
	plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), ipListLen);
	if (plist == NULL)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "calloc() fail[%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(4);
		*resplen = pos;
		return 1;
	}
	ret = comReadShfn(gd_IP_LIST_file, 4, ipListLen*sizeof(IP_MAC_NAME_t), (char *)plist) ;
	if (ret < 0)
	{
		free(plist);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail[%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(4);
		*resplen = pos;
		return 1;
	}

	fp = fopen("/tmp/ipl.txt", "w");
	if (fp == NULL)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "fopen(\"/tmp/ipl.txt\", \"w\") error[%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(3);
		*resplen = pos;
		return 1;
	}
	for (i=0; i<ipListLen; i++)
	{
		fprintf(fp, "%s\t%s\t%s\n", plist[i].ip, plist[i].mac, plist[i].name);
	}
	fclose(fp);
	free(plist);
	pheader->code = htonl(0);
	
	return 0;
}


int deal_delete_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
	Header_t  *pheader;
	IP_MAC_NAME_t *plist, *pnode;
	int       i, ret;
	int       pos;
	char      *buf;
	int       whileListLen;
	
	pheader = (Header_t *)resp;
	pheader->buflen = htonl(sizeof(Header_t));
	*resplen = sizeof(Header_t);
	pnode = (IP_MAC_NAME_t *)(reqBuf+sizeof(Header_t));

	ret = comReadShfn(gd_WHITE_LIST_file, 0, 4, (char *)&whileListLen) ;
	if (ret < 0)	
	{
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}

	//white list is empty
	if (whileListLen < 1)
	{
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "The white list is empty, can not delete any <ip mac user>!\n");
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(2);
		*resplen = pos;
		return 1;
	}

	plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
	if (plist == NULL)
	{
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "calloc() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return -1;
	}
	ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist);
	if (ret < 0)	
	{
		free(plist);
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return -1;
	}

	for (i=0; i<whileListLen; i++)
	{
//printf("strcmp(plist[%d].mac[%s] pnode->mac[%s]\n", i, plist[i].mac, pnode->mac);
		if (strcmp(plist[i].ip, pnode->ip) == 0)
		{
			break;
		}
	}
	if (i == whileListLen)
	{
		free(plist);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "Can not find MAC[%s] in the while list!\n", pnode->mac);
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		pheader->code = htonl(2);
		*resplen = pos;
		return 1;
	}
	fSemSetPlus(gd_semfd, 0);
	ret = comMkShfn(gd_WHITE_LIST_file, 4,  1);
	if (ret < 0)	
	{
		fSemSetSub(gd_semfd, 0);
		free(plist);
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comMkShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}
	i = whileListLen - 1;
	ret = comWriteShfn(gd_WHITE_LIST_file, 0, (char *)&i, 4) ;
	if (ret < 0)	
	{
		fSemSetSub(gd_semfd, 0);
		free(plist);
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comWriteShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}
	
	for (i=0; i<whileListLen; i++)
	{
		if (strcmp(plist[i].ip, pnode->ip) == 0)  continue;		
		ret = appendWriteShfn(gd_WHITE_LIST_file, (char *)(plist+i), sizeof(IP_MAC_NAME_t));
		if (ret < 0)	
		{
			fSemSetSub(gd_semfd, 0);
			free(plist);
			pheader->code = htonl(1);
			pos = sizeof(Header_t);
			buf = resp + pos;
			sprintf(buf, "appendWriteShfn() fail [%s]!\n", strerror(errno));
			pos += strlen(buf);
			pos ++;
			pheader->buflen = htonl(pos);
			*resplen = pos;
			return 1;
		}
	}
	free(plist);
	fSemSetSub(gd_semfd, 0);
	pheader->code = htonl(0);
	
	return 0;
}

int deal_add_white_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{
	Header_t  *pheader;
	IP_MAC_NAME_t *plist, *pnode;
	int       i;
	int       pos;
	char      *buf;
	int       ret;
	int       whileListLen;
	
	pheader = (Header_t *)resp;
	pheader->buflen = htonl(sizeof(Header_t));
	*resplen = sizeof(Header_t);
	pnode = (IP_MAC_NAME_t *)(reqBuf+sizeof(Header_t));

	ret = comReadShfn(gd_WHITE_LIST_file, 0, 4, (char *)&whileListLen) ;
	if (ret < 0)	
	{
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 1;
	}

	if (whileListLen > 0)
	{
		plist = (IP_MAC_NAME_t *)calloc(sizeof(IP_MAC_NAME_t), whileListLen);
		if (plist == NULL)
		{
			pheader->code = htonl(1);
			pos = sizeof(Header_t);
			buf = resp + pos;
			sprintf(buf, "calloc() fail [%s]!\n", strerror(errno));
			pos += strlen(buf);
			pos ++;
			pheader->buflen = htonl(pos);
			*resplen = pos;
			return -1;
		}
		ret = comReadShfn(gd_WHITE_LIST_file, 4, whileListLen*sizeof(IP_MAC_NAME_t), (char *)plist);
		if (ret < 0)	
		{
			free(plist);
			pheader->code = htonl(1);
			pos = sizeof(Header_t);
			buf = resp + pos;
			sprintf(buf, "comReadShfn() fail [%s]!\n", strerror(errno));
			pos += strlen(buf);
			pos ++;
			pheader->buflen = htonl(pos);
			*resplen = pos;
			return -1;
		}
		
		for (i=0; i<whileListLen; i++)
		{
//printf("plist[i].ip[%s] pnode->ip[%s]\n", plist[i].ip, pnode->ip);
			if ( (strcmp(plist[i].mac, pnode->mac) == 0) || 
			     (strcmp(plist[i].ip, pnode->ip) == 0) )
			{
				free(plist);
				pheader->code = htonl(1);
				pos = sizeof(Header_t);
				buf = resp + pos;
				sprintf(buf, "The MAC or IP Had exist in while list, can not twice!\n");
				pos += strlen(buf);
				pos ++;
				pheader->buflen = htonl(pos);
				*resplen = pos;
				return 0;
			}
		}
		free(plist);
	}
	fSemSetPlus(gd_semfd, 0);
	ret = comWriteShfn(gd_WHITE_LIST_file, 4+whileListLen*sizeof(IP_MAC_NAME_t), (char *)pnode, sizeof(IP_MAC_NAME_t)) ;
	if (ret < 0)
	{
		fSemSetSub(gd_semfd, 0);
		pheader->code = htonl(1);
		pos = sizeof(Header_t);
		buf = resp + pos;
		sprintf(buf, "comWriteShfn() fail [%s]!\n", strerror(errno));
		pos += strlen(buf);
		pos ++;
		pheader->buflen = htonl(pos);
		*resplen = pos;
		return 0;
	}
	whileListLen ++;
	ret = comWriteShfn(gd_WHITE_LIST_file, 0, (char *)&whileListLen, 4);
	if (ret < 0)  return -1;
	fSemSetSub(gd_semfd, 0);
	pheader->code = htonl(0);
	
	return 0;
}


int deal_add_ip_list(char *reqBuf, int requestlen, char *resp, int *resplen)
{

⌨️ 快捷键说明

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