亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tftpserver.cpp

?? 一個(gè)簡單的tftp服務(wù)器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
		if (string[i] >= 'A' && string[i] <= 'Z')			string[i] += diff;	return string;}bool isIP(char *string){	int j = 0;	for (; *string; string++)	{		if (*string == '.')			j++;		else if (*string < '0' || *string > '9')			return 0;	}	if (j == 3)		return 1;	else		return 0;}void clean(request* req){	if (req->file)		fclose(req->file);	if (req->pkt[0])		free(req->pkt[0]);	if (req->pkt[1])		free(req->pkt[1]);	free(req);}DWORD my_inet_addr(char *str){	if (str == NULL)		return INADDR_ANY;	DWORD x = inet_addr(str);	if (x == INADDR_NONE)		return INADDR_ANY;	else		return x;}void init(){	memset(&cfig, 0, sizeof(cfig));	char iniStr[4096];	char name[512];	char value[512];	if (verbatim)	{		cfig.logLevel = 2;		printf("%s\n\n", sVersion);	}	else if (getSection("LOGGING", iniStr, 1, iniFile))	{		char *iniStrPtr = myGetToken(iniStr, 0);		if (!iniStrPtr[0] || !strcasecmp(iniStrPtr, "None"))			cfig.logLevel = 0;		else if (!strcasecmp(iniStrPtr, "Errors"))			cfig.logLevel = 1;		else if (!strcasecmp(iniStrPtr, "All"))			cfig.logLevel = 2;		else if (!strcasecmp(iniStrPtr, "Debug"))			cfig.logLevel = 3;		else		{			cfig.logLevel = 1;			sprintf(logBuff, "Section [LOGGING], Invalid Logging Level: %s, ignored", myGetToken(iniStr, 0));			logMess(logBuff, 1);		}	}	if (!verbatim && cfig.logLevel && logFile[0])	{		FILE *f = fopen(logFile, "wt");		if (f)		{			fprintf(f, "%s\n", sVersion);			fclose(f);		}		else		{			sprintf(iniStr, "Warning: faled to open log file %s", logFile);			syslog(LOG_MAKEPRI(LOG_LOCAL1, LOG_CRIT), iniStr);			logFile[0] = 0;		}	}	FILE *f = fopen(iniFile, "rt");	if (f)		fclose(f);	else	{		sprintf(logBuff, "Warning: Failed to open ini File %s", iniFile);		logMess(logBuff, 1);	}	if (getSection("LISTEN-ON", iniStr, 1, iniFile))	{		char *iniStrPtr = myGetToken(iniStr, 0);		for (int i = 0; i < MAX_SERVERS && iniStrPtr[0]; iniStrPtr = myGetToken(iniStrPtr, 1))		{			WORD port = 69;			mySplit(name, value, iniStrPtr, ':');			if (strlen(value))			{				port = atoi(value);			}			DWORD ip = my_inet_addr(name);			if (isIP(name) && ip)			{				for (BYTE j = 0; j < MAX_SERVERS; j++)				{					if (cfig.servers[j] == ip)						break;					else if (!cfig.servers[j])					{						cfig.servers[j] = ip;						cfig.ports[j] = port;						i++;						break;					}				}			}			else			{				sprintf(logBuff, "Warning: Section [LISTEN-ON], Invalid IP Address %s, ignored", iniStrPtr);				logMess(logBuff, 1);			}		}	}	if (getSection("HOME", iniStr, 1, iniFile))	{		char *iniStrPtr = myGetToken(iniStr, 0);		for (; iniStrPtr[0]; iniStrPtr = myGetToken(iniStrPtr, 1))		{			mySplit(name, value, iniStrPtr, '=');			if (strlen(value))			{				if (!cfig.homes[0].alias[0] && cfig.homes[0].target[0])				{					sprintf(logBuff, "Section [HOME], alias and bare path mixup, entry %s ignored", iniStrPtr);					logMess(logBuff, 1);				}				else if (strchr(name, '/') || strchr(name, '\\') || strchr(name, '>') || strchr(name, '<') || strchr(name, '.'))				{					sprintf(logBuff, "Section [HOME], invalid chars in alias %s, entry ignored", name);					logMess(logBuff, 1);				}				else if (name[0] && strlen(name) < 64 && value[0])				{					for (int i = 0; i < 8; i++)					{						if (cfig.homes[i].alias[0] && !strcasecmp(name, cfig.homes[i].alias))						{							sprintf(logBuff, "Section [HOME], Duplicate Entry: %s ignored", iniStrPtr);							logMess(logBuff, 1);							break;						}						else if (!cfig.homes[i].alias[0])						{							strcpy(cfig.homes[i].alias, name);							strcpy(cfig.homes[i].target, value);							if (cfig.homes[i].target[strlen(cfig.homes[i].target) - 1] != '/')								strcat(cfig.homes[i].target, "/");							break;						}					}				}				else				{					sprintf(logBuff, "Section [HOME], alias name too large", name);					logMess(logBuff, 1);				}			}			else if (!cfig.homes[0].alias[0] && !cfig.homes[0].target[0])			{				strcpy(cfig.homes[0].target, name);				if (cfig.homes[0].target[strlen(cfig.homes[0].target) - 1] != '/')					strcat(cfig.homes[0].target, "/");			}			else if (cfig.homes[0].alias[0])			{				sprintf(logBuff, "Section [HOME], alias and bare path mixup, entry %s ignored", iniStrPtr);				logMess(logBuff, 1);			}			else if (cfig.homes[0].target[0])			{				sprintf(logBuff, "Section [HOME], Duplicate Path: %s ignored", iniStrPtr);				logMess(logBuff, 1);			}			else			{				sprintf(logBuff, "Section [HOME], missing = sign, Invalid Entry: %s ignored", iniStrPtr);				logMess(logBuff, 1);			}		}	}	if (!cfig.homes[0].target[0])	{		strcpy(cfig.homes[0].target, "/home/");	}	if (getSection("TFTP-OPTIONS", iniStr, 1, iniFile))	{		char *iniStrPtr = myGetToken(iniStr, 0);		for (; strlen(iniStrPtr); iniStrPtr = myGetToken(iniStrPtr, 1))		{			mySplit(name, value, iniStrPtr, '=');			if (strlen(value))			{				if (!strcasecmp(name, "blksize"))				{					DWORD tblksize = atol(value);					if (tblksize < 512)						blksize = 512;					else if (tblksize > USHRT_MAX - 32)						blksize = USHRT_MAX - 32;					else						blksize = tblksize;				}				else if (!strcasecmp(name, "timeout"))				{					timeout = atol(value);					if (timeout < 1)						timeout = 1;					else if (timeout > 255)						timeout = 255;				}				else if (!strcasecmp(name, "Read"))				{					if (!strcasecmp(value, "y"))						cfig.fileRead = true;					else						cfig.fileOverwrite = false;				}				else if (!strcasecmp(name, "Write"))				{					if (!strcasecmp(value, "y"))						cfig.fileWrite = true;					else						cfig.fileWrite = false;				}				else if (!strcasecmp(name, "Overwrite"))				{					if (!strcasecmp(value, "y"))						cfig.fileOverwrite = true;					else						cfig.fileOverwrite = false;				}				else				{					sprintf(logBuff, "Warning: unknown option %s, ignored", name);					logMess(logBuff, 1);				}			}		}	}	if (!cfig.fileRead && !cfig.fileWrite && !cfig.fileOverwrite)	{		cfig.fileRead = true;	}	if (getSection("ALLOWED-CLIENTS", iniStr, 1, iniFile))	{		char *iniStrPtr = myGetToken(iniStr, 0);		for (int i = 0; i < 32 && iniStrPtr[0]; iniStrPtr = myGetToken(iniStrPtr, 1))		{			DWORD rs = 0;			DWORD re = 0;			mySplit(name, value, iniStrPtr, '-');			rs = htonl(my_inet_addr(name));			if (strlen(value))				re = htonl(my_inet_addr(value));			else				re = rs;			if (rs && rs != INADDR_NONE && re && re != INADDR_NONE && rs <= re)			{				cfig.hostRanges[i].rangeStart = rs;				cfig.hostRanges[i].rangeEnd = re;				i++;			}			else			{				sprintf(logBuff, "Section [ALLOWED-CLIENTS] Invalid entry %s in ini file, ignored", iniStrPtr);				logMess(logBuff, 1);			}		}	}	if (!cfig.servers[0])		getServ(cfig.servers, cfig.ports, MAX_SERVERS);	int i = 0;	for (int j = 0; j < MAX_SERVERS && cfig.servers[j]; j++)	{		cfig.tftpConn[i].sock = socket(PF_INET,		                              SOCK_DGRAM,		                              IPPROTO_UDP);		if (cfig.tftpConn[i].sock == -1 )		{			sprintf(logBuff, "Failed to Create Socket");			logMess(logBuff, 1);			continue;		}		cfig.tftpConn[i].addr.sin_family = AF_INET;		cfig.tftpConn[i].addr.sin_addr.s_addr = cfig.servers[j];		cfig.tftpConn[i].addr.sin_port = htons(cfig.ports[j]);		int nRet = bind(cfig.tftpConn[i].sock,		                      (sockaddr*)&cfig.tftpConn[i].addr,		                      sizeof(struct sockaddr_in)		                     );		if (nRet == -1)		{			close(cfig.tftpConn[i].sock);			sprintf(logBuff, "%s Port %u, bind failed, %s", IP2String(tempbuff, cfig.servers[j]), cfig.ports[j], strerror(errno));			logMess(logBuff, 1);			continue;		}		if (cfig.maxFD < cfig.tftpConn[i].sock)			cfig.maxFD = cfig.tftpConn[i].sock;		cfig.tftpConn[i].server = cfig.servers[j];		cfig.tftpConn[i].port = cfig.ports[j];		i++;	}	cfig.maxFD++;	if (!cfig.tftpConn[0].server)	{		sprintf(logBuff, "no listening Interfaces available, stopping...");		logMess(logBuff, 1);		exit(-1);	}	else if (verbatim)	{		printf("starting TFTP...\n");	}	else	{		sprintf(logBuff, "starting TFTP Service");		logMess(logBuff, 1);	}	if (cfig.tftpConn[0].server)	{		for (int i = 0; i < 8; i++)			if (cfig.homes[i].target[0])			{				sprintf(logBuff, "alias /%s is mapped to %s", cfig.homes[i].alias, cfig.homes[i].target);				logMess(logBuff, 1);			}		for (int i = 0; i < MAX_SERVERS && cfig.tftpConn[i].server; i++)		{			sprintf(logBuff, "listening On: %s:%i", IP2String(tempbuff, cfig.tftpConn[i].server),cfig.tftpConn[i].port);			logMess(logBuff, 1);		}		if (cfig.hostRanges[0].rangeStart)		{			char temp[128];			for (int i = 0; i <= 32 && cfig.hostRanges[i].rangeStart; i++)			{				sprintf(logBuff, "%s", "permitted clients: ");				sprintf(temp, "%s-", IP2String(tempbuff, htonl(cfig.hostRanges[i].rangeStart)));				strcat(logBuff, temp);				sprintf(temp, "%s", IP2String(tempbuff, htonl(cfig.hostRanges[i].rangeEnd)));				strcat(logBuff, temp);				logMess(logBuff, 1);			}		}		else		{			sprintf(logBuff, "%s", "permitted clients: all");			logMess(logBuff, 1);		}		sprintf(logBuff, "max blksize: %u", blksize);		logMess(logBuff, 1);		sprintf(logBuff, "defult blksize: %u", 512);		logMess(logBuff, 1);		sprintf(logBuff, "default timeout: %u", timeout);		logMess(logBuff, 1);		sprintf(logBuff, "file read allowed: %s", cfig.fileRead ? "Yes" : "No");		logMess(logBuff, 1);		sprintf(logBuff, "file create allowed: %s", cfig.fileWrite ? "Yes" : "No");		logMess(logBuff, 1);		sprintf(logBuff, "file overwrite allowed: %s", cfig.fileOverwrite ? "Yes" : "No");		logMess(logBuff, 1);		if (!verbatim)		{			sprintf(logBuff, "logging: %s", cfig.logLevel > 1 ? "all" : "errors");			logMess(logBuff, 1);		}	}}void logMess(char *logBuff, BYTE logLevel){	if (verbatim)		printf("%s\n", logBuff);	else if (logFile[0] && logLevel <= cfig.logLevel)	{		char currentTime[32];		time_t t = time(NULL);		tm *ttm = localtime(&t);		strftime(currentTime, sizeof(currentTime), "%d-%b-%y %X", ttm);		FILE *f = fopen(logFile, "at");		if (f)		{			fprintf(f, "[%s] %s\n", currentTime, logBuff);			fclose(f);		}		else		{			syslog(LOG_MAKEPRI(LOG_LOCAL1, LOG_CRIT), logBuff);		}	}	else if (logLevel <= cfig.logLevel)		syslog(LOG_MAKEPRI(LOG_LOCAL1, LOG_CRIT), logBuff);}void logMess(request *req, BYTE logLevel){	if (verbatim)	{		if (!req->serverError.errormessage[0])			printf(req->serverError.errormessage, strerror(errno));		if (req->path[0])			printf("Client %s:%u %s, %s\n", inet_ntoa(req->client.sin_addr), ntohs(req->client.sin_port), req->path, req->serverError.errormessage);		else			printf("Client %s:%u, %s\n", inet_ntoa(req->client.sin_addr), ntohs(req->client.sin_port), req->serverError.errormessage);	}	else if (logFile[0] && logLevel <= cfig.logLevel)	{		char currentTime[32];		time_t t = time(NULL);		tm *ttm = localtime(&t);		strftime(currentTime, sizeof(currentTime), "%d-%b-%y %X", ttm);		FILE *f = fopen(logFile, "at");		if (f)		{			if (req->path[0])				fprintf(f,"[%s] Client %s:%u %s, %s\n", currentTime, inet_ntoa(req->client.sin_addr), ntohs(req->client.sin_port), req->path, req->serverError.errormessage);			else				fprintf(f,"[%s] Client %s:%u, %s\n", currentTime, inet_ntoa(req->client.sin_addr), ntohs(req->client.sin_port), req->serverError.errormessage);			fclose(f);		}	}	else if (logLevel <= cfig.logLevel)	{		char logBuff[256];		if (!req->serverError.errormessage[0])			sprintf(req->serverError.errormessage, strerror(errno));		if (req->path[0])			sprintf(logBuff,"Client %s:%u %s, %s\n", inet_ntoa(req->client.sin_addr), ntohs(req->client.sin_port), req->path, req->serverError.errormessage);		else			sprintf(logBuff,"Client %s:%u, %s\n", inet_ntoa(req->client.sin_addr), ntohs(req->client.sin_port), req->serverError.errormessage);		syslog(LOG_MAKEPRI(LOG_LOCAL1, LOG_CRIT), logBuff);	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久一区二区三区| 欧美性xxxxxx少妇| 国产日韩欧美精品一区| 国产福利91精品一区二区三区| 精品国一区二区三区| 精品在线视频一区| 久久精品欧美日韩| caoporm超碰国产精品| 亚洲欧洲三级电影| 欧美精品第1页| 国产一区二区在线看| 中文字幕av一区二区三区免费看 | 日韩高清不卡一区| 欧美电影免费提供在线观看| 国产一区二区免费看| 欧美韩国日本不卡| 欧美三级日本三级少妇99| 蜜桃视频在线一区| 国产精品久久久久一区| 在线观看不卡一区| 美女一区二区视频| 国产精品国产三级国产普通话99| 日本高清无吗v一区| 日本中文字幕一区二区有限公司| 久久亚洲影视婷婷| 色94色欧美sute亚洲线路一久| 免费成人av在线| 亚洲欧洲日产国产综合网| 欧美精品一卡二卡| 不卡的电影网站| 日本亚洲免费观看| 亚洲欧美日韩在线播放| 日韩一本二本av| 91免费在线视频观看| 精品一区二区免费在线观看| 亚洲精品一卡二卡| 精品88久久久久88久久久| 色噜噜夜夜夜综合网| 国产精品白丝av| 日本少妇一区二区| 一区二区三区精品在线| 久久久国产精品午夜一区ai换脸| 色婷婷综合在线| 国产91高潮流白浆在线麻豆| 奇米888四色在线精品| 亚洲免费观看在线观看| 久久精品欧美日韩精品| 欧美一区二区免费| 欧美视频一区二区三区| 91丨九色丨黑人外教| 国产精品一区久久久久| 偷拍自拍另类欧美| 亚洲国产综合91精品麻豆| 国产精品免费看片| 亚洲精品一区二区三区蜜桃下载 | 欧美一区二区在线免费播放| 中文久久乱码一区二区| 成人激情综合网站| 精品一区在线看| 天天色图综合网| 亚洲精品久久久蜜桃| 国产网站一区二区| www国产精品av| 日韩免费成人网| 欧美精品在线观看一区二区| 欧美性大战久久| 欧美亚洲丝袜传媒另类| www.在线欧美| 波多野结衣一区二区三区 | 视频一区视频二区中文| 亚洲精品亚洲人成人网在线播放| 日本一区二区免费在线| 日本一区二区三区电影| 欧美精彩视频一区二区三区| 国产欧美日韩激情| 国产精品视频九色porn| 国产精品美女久久久久aⅴ| 国产欧美视频一区二区三区| 久久综合狠狠综合久久激情| 精品成人一区二区三区| 久久精品欧美日韩精品| 国产欧美一区二区精品仙草咪| 中文字幕乱码一区二区免费| 欧美激情一区不卡| 国产精品二三区| 中文字幕亚洲在| 亚洲你懂的在线视频| 亚洲成人精品一区| 蜜桃在线一区二区三区| 国产精品一区二区果冻传媒| 成人18精品视频| 91福利小视频| 欧美一区在线视频| 精品理论电影在线观看| 日本一区二区三区国色天香 | 亚洲电影一区二区| 亚洲成人综合视频| 免费欧美在线视频| 国产91精品一区二区| 色呦呦国产精品| 欧美一区二区三区四区久久| 2024国产精品| 亚洲人成精品久久久久久| 午夜精品久久久久久久99樱桃| 久久99热99| 91网站视频在线观看| 日韩情涩欧美日韩视频| 国产精品无遮挡| 日欧美一区二区| 成人免费黄色在线| 欧美嫩在线观看| 国产精品污网站| 无吗不卡中文字幕| 国产91丝袜在线观看| 欧美日韩卡一卡二| 久久精品亚洲精品国产欧美| 中文字幕一区二区三区在线播放| 日韩在线a电影| 成人免费的视频| 欧美一区二区三区系列电影| 国产欧美精品一区aⅴ影院| 亚洲一区在线观看视频| 国产丶欧美丶日本不卡视频| 欧美日韩在线播放三区四区| 欧美激情综合网| 日本中文字幕一区二区视频| 91在线视频在线| 精品国产一区久久| 亚洲国产一区视频| 国产成人亚洲综合a∨婷婷| 欧美男男青年gay1069videost| 国产精品久久久久久久久免费樱桃| 丝袜国产日韩另类美女| 一本大道久久a久久综合婷婷| 2021国产精品久久精品| 三级在线观看一区二区| 色网综合在线观看| 中文字幕第一区综合| 久久精品72免费观看| 欧美精品九九99久久| 亚洲乱码一区二区三区在线观看| 国产精品996| 欧美xxxxxxxx| 日韩电影网1区2区| 91福利资源站| 亚洲精品五月天| 不卡av电影在线播放| 精品第一国产综合精品aⅴ| 天天色图综合网| 欧美精品tushy高清| 亚洲综合丝袜美腿| 一本大道久久a久久精二百| 国产精品久久久久一区| 国产成人av电影在线播放| 日韩美一区二区三区| 免费欧美在线视频| 日韩欧美在线123| 日韩成人精品在线观看| 欧美日韩精品系列| 午夜精品久久久久影视| 欧美日韩一级黄| 日韩综合在线视频| 3d动漫精品啪啪一区二区竹菊| 亚洲一区二区三区四区在线免费观看 | 亚洲国产成人在线| 成人在线视频一区| 国产精品人人做人人爽人人添| 国产精品99久久久久久久女警 | 香蕉久久一区二区不卡无毒影院 | 色欧美片视频在线观看在线视频| 中文字幕一区二区三区精华液| 成人午夜私人影院| 国产精品美女久久久久久久久| 99久久精品免费看国产| 亚洲人成7777| 欧美午夜精品久久久久久孕妇| 亚洲亚洲人成综合网络| 欧美精品视频www在线观看| 日韩国产精品久久| 日韩精品中文字幕一区二区三区| 狠狠狠色丁香婷婷综合激情| 国产性做久久久久久| 成人午夜在线视频| 亚洲欧美另类小说视频| 在线精品国精品国产尤物884a| 亚洲不卡av一区二区三区| 欧美一二三四在线| 国产成人亚洲综合a∨婷婷| 日韩毛片一二三区| 欧美日韩久久久久久| 免播放器亚洲一区| 中文字幕av一区二区三区高| 一本大道久久a久久精二百| 三级一区在线视频先锋| 久久久久久久性| 色婷婷av一区二区三区大白胸| 热久久国产精品| 中文字幕欧美区| 欧美美女一区二区三区| 国产一区二区日韩精品|