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

📄 loginreply.c

📁 检查用户信息(包括用户名和密码)和用户登录程序
💻 C
字号:
/*************************************************************PROJECT CODE: COMMAND RESOLUTION                           **CREAT DATE  : 2006-12-19                                   **CREAT BY    : LiHui                                        **FUNCTION    : RESOLUTE THE COMMAND FROM REMOTE PC          **MODIFY DATE :                                              **DOCUMENT    : NO                                           **OTHERS      : NO                                           **OS          : LINUX                                        *************************************************************//*The code of LoginReply.c*/#include <sys/mman.h>#include <sys/types.h>#include <sys/socket.h>#include <linux/fs.h> #include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h> #include <errno.h>#include <stdlib.h> #include <string.h>#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>#include <netdb.h>#include <fcntl.h>#include <sys/stat.h>#include <time.h>#include "CommandResolution.h"#include "LoginReply.h"//响应用户登入登出命令#include "Interception.h"//监听操作头文件#include "BrowseReplay.h"//查询重放命令解析头文件#include "ArchiveThread.h"//备份数据线程头文件#include "fs.h"//与硬盘操作相关的函数#include "mpi.h"#include "q21.h"#include "dsp.h"/*登入检查函数*/int LoginReply(char *msgBuffer, int msglen){	User_Information UserInfo; 	unsigned char UserNameLen;	unsigned char PasswordLen;	int retval = -2;		if(Collecter_Inf.LoginPC_num < MAX_LOGIN_NUM)	{		UserNameLen = (unsigned char)msgBuffer[6]*256 + (unsigned char)msgBuffer[5];		PasswordLen = (unsigned char)msgBuffer[9 + UserNameLen]*256 +(unsigned char)msgBuffer[8 + UserNameLen];		memset(&UserInfo, 0, sizeof(User_Information));		memcpy(UserInfo.UserName, msgBuffer + 7, UserNameLen);		memcpy(UserInfo.Password, msgBuffer + 10 + UserNameLen, PasswordLen);				retval = UserInfoCheck(&UserInfo);				if(retval = 0)		{//登入成功			memcpy(&Collecter_Inf.LoginPC[Collecter_Inf.LoginPC_num].ServerIP, &addr_from, sizeof(struct sockaddr_in));			memcpy(Collecter_Inf.LoginPC[Collecter_Inf.LoginPC_num].UserPowerCH, UserInfo.UserPowerCH, MAX_CHANNEL_NUM);			Collecter_Inf.LoginPC[Collecter_Inf.LoginPC_num].UserPowerOP = UserInfo.UserPowerOP;			Collecter_Inf.LoginPC_num ++;			msgBuffer[3] = 'A';			msgBuffer[4] = 0x00;//登录成功			msgBuffer[5] = 0xff;			sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) );			return 0;		}		else		{//登入失败			msgBuffer[3] = 'A';			msgBuffer[4] = 0x01;//登录失败			msgBuffer[5] = 0xff;			sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) );			return -1;		}				}	else 	{//登入失败		msgBuffer[3] = 'A';		msgBuffer[4] = 0x01;//登录失败		msgBuffer[5] = 0xff;		sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) );		return -1;	}}/*检查用户信息,包括用户名和密码。返回值 -1表示用户名或密码不正确,登入失败*/int UserInfoCheck(User_Information *UserInfo){	struct s_iniinfo s_Ini_Info;//读取USERINFO.INI文件时调用	char userinfo_buff[512*1024];//USERINFO.INI文件缓冲区	unsigned long userinfo_len;  //USERINFO.INI文件长度	User_Information UserInfo_temp;	unsigned char UserinfoSize;	unsigned char usernum;//USERINFO.INI文件中的用户数量	unsigned char index;	char *UserInfo_Head = "[USERINFO]";	char *pAddr;	s_Ini_Info.num = USERINFO_INI;	userinfo_len = read_ini(&s_Ini_Info, userinfo_buff);//读取USERINFO.INI文件		pAddr 	= strstr(userinfo_buff, UserInfo_Head);//找出[USERINFO]字段		pAddr += 10;	usernum = *pAddr;//查找注册用户数目	pAddr++;	UserinfoSize = (unsigned char)sizeof(User_Information);		for(index = 0; index < usernum; index ++)	{		memset(&UserInfo_temp, 0, UserinfoSize);		memcpy(&UserInfo_temp, pAddr + index*UserinfoSize, UserinfoSize);		if(!(strcmp(UserInfo_temp.UserName, UserInfo->UserName) || strcmp(UserInfo_temp.Password, UserInfo->Password)))//用户名和密码正确,允许登入		{			*UserInfo = UserInfo_temp;			return 0;//用户登录成功		}	}	return -1;//用户登录失败}/*退出检查函数*/int LogoutReply(char *msgBuffer, int msglen, int loginIndex){	int index;	for(index = loginIndex; index < Collecter_Inf.LoginPC_num; index++ )//将该PC的IP从IP列表中删除,并且登录的PC机个数减1		Collecter_Inf.LoginPC[index].ServerIP= Collecter_Inf.LoginPC[index+1].ServerIP;		Collecter_Inf.LoginPC_num --;	msgBuffer[3] = 'A' ;	msgBuffer[4] = 0x00;//退出成功	msgBuffer[5] = 0xff;    	sendto( socket_udp_send, msgBuffer, 6, 0,(struct sockaddr*)&addr_from, sizeof(struct sockaddr_in) );	return 0;}

⌨️ 快捷键说明

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