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

📄 authserver.cc

📁 验证服务器端的例子
💻 CC
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <unistd.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/socket.h>#include <arpa/inet.h>#include "authserver.h"#include "sssutil.h"#include "utility.h"int packerr(char *, char *);int packsucc(char *, char*, char *);int writelog(char *, int);struct logonauth{        char userid[11];        char passwd[17];        char usbkeycode[25];        char usercode[17];}LOGONAUTH;int main(int argc, char **argv){	int listenfd, connfd;	char buf[BUFFSIZE];	struct sockaddr_in servaddr, cliaddr;	struct hostent *hp;	struct in_addr **pptr;	struct logonauth logonauth;	int len;	int authret;	char pin[11];	char url[1024]; 		if(argc < 2)	{		printf("Usage: ./logonserver serveraddress\n");		return -1;	}	if((hp = gethostbyname(argv[1])) == NULL)		printf("Get hp data error!!!\n");	pptr = (struct in_addr **)hp->h_addr_list;		listenfd = socket(AF_INET, SOCK_STREAM, 0);	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family = AF_INET;	memcpy(&servaddr.sin_addr, *pptr, sizeof(servaddr));	servaddr.sin_port = htons(portnum);	bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));	listen(listenfd, listenqueuenum);	for(;;)	{		len = sizeof(cliaddr);		if((connfd = accept(listenfd, (struct sockaddr*)&cliaddr, (socklen_t *)&len)) < 0) 		{			if(connfd == -1)				continue;			else				printf("accept error!!!");		}		printf("client %s connected!!!\n",  inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)));		if(fork()>0)		{			close(listenfd);			char head[2];			head[2]=0;			read(connfd, head, sizeof(head));			bzero(buf, sizeof(buf));			if(memcmp(head, "01", 2) != 0)			{				char *err = "Error data head";				if( packerr(buf, err) > 0)				write(connfd, buf, strlen(buf));				close(connfd);				exit(-1);			}			bzero(url, sizeof(url));			bzero(&logonauth, sizeof(struct logonauth));			read(connfd, logonauth.userid, USERIDLEN);				read(connfd, logonauth.passwd, PASSWDLEN);			read(connfd, logonauth.usbkeycode, USBKEYCODELEN);			read(connfd, logonauth.usercode, USERCODELEN);			writelog(logonauth.userid, USERIDLEN);			writelog(logonauth.passwd, PASSWDLEN);			writelog(logonauth.usbkeycode, USBKEYCODELEN);			writelog(logonauth.usercode, USERCODELEN);			writelog("\n", 1);			int ret=LogonUserInfoCheck(logonauth.userid, logonauth.passwd);			if(ret == -1)			{				char *err = "db opertion error!!!";				if( packerr(buf, err) > 0)				write(connfd, buf, strlen(buf));				close(connfd);				exit(-1);			}			else if(ret == -2)			{				char *err = "user or passed error!!!";				if( packerr(buf, err) > 0)				write(connfd, buf, strlen(buf));				close(connfd);				exit(-1);			}			ret=USBKeyInfoCheck(logonauth.userid, logonauth.usbkeycode, logonauth.usercode);                        if(ret == -1)                        {                                       char *err = "db opertion error!!!";                                if( packerr(buf, err) > 0)                                write(connfd, buf, strlen(buf));                                close(connfd);				exit(-1);                        }                        else if(ret == -2)                        {                                char *err = "userid and usbkey not match!!!";                                if( packerr(buf, err) > 0)                                write(connfd, buf, strlen(buf));                                close(connfd);				exit(-1);                        }						bzero(buf, sizeof(buf));			bzero(pin, sizeof(pin));			sprintf(url, "%s", URL);			SidGen(pin, sizeof(pin), 10);			ret = InsertUserPin(logonauth.usercode, pin);			if(ret == -1)                        {                                char *err = "db opertion error!!!";                                if( packerr(buf, err) > 0)                                write(connfd, buf, strlen(buf));                                close(connfd);				exit(-1);                        }                        else if(ret == -2)                        {                                char *err = "insert pin error!!!";                                if( packerr(buf, err) > 0)                                write(connfd, buf, strlen(buf));                                close(connfd);				exit(-1);                        }			if(packsucc(buf, pin, url) > 0)				write(connfd, buf, 14 + strlen(url));			close(connfd);			exit(0);		}	}	return 0;}int packerr( char *buf, char *errmsg){	char *ptr = buf;	ptr[0] = '1';	sprintf(&buf[1], "%03d", strlen(errmsg));	memcpy(&buf[4], errmsg, strlen(errmsg));	return sizeof(errmsg) + 4;}int packsucc(char *buf, char* pin, char*url){	char *ptr = buf;	char *ppin = pin;	char *purl = url;	ptr[0] = '0';	sprintf(&buf[1], "%s%03d%s", pin, strlen(purl), purl);	return 1;}ssize_t readbuf(int fd, void *vpter, size_t n){	ssize_t nread;		if((nread = read(fd, vpter, n)) < 0)		if(nread == -1)			return -1;	return 0;}int writelog(char *buf, int len){	FILE *fp;	if((fp = fopen("auth.log", "a+")) == NULL)		return -1;	fwrite(buf, len, 1, fp);	fclose(fp);	return 0;}

⌨️ 快捷键说明

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