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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dualserver.cpp

?? Combined DHCP/DNS Server. DHCP Server allots addresses and DNS Server first try resolving from DHCP
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

WORD scanloc(data5 *req)
{
	if (cfig.dns[0])
		req->dnsp->header.ra = 1;

	if (!req->query[0])
		return 0;

	strcpy(req->mapname, req->query);
	strcpy(req->cname, req->query);
	myLower(req->mapname);

	//printf("%s\n",req->query);

	switch (req->qtype)
	{
		case DNS_TYPE_PTR:
			{
				char *dp = strstr(req->mapname, arpa);

				if (dp)
					*dp = 0;

				req->localCode = makeLocal(htonl(my_inet_addr(req->mapname)));
			}
			break;

		case DNS_TYPE_A:
			req->localCode = makeLocal(req->mapname);
			if (req->localCode == 1)
			{
				sprintf(req->cname, "%s.%s", req->mapname, cfig.zone);
			}
			else if (req->localCode == 3)
			{
				req->localCode = 1;
				sprintf(req->mapname, "www");
				sprintf(req->cname, "www.%s", cfig.zone);
			}
			break;

		case DNS_TYPE_MX:
			req->localCode = makeLocal(req->mapname);
			if (req->localCode == 0 || req->localCode == 2)
			{
				return 0;
			}
			else if (req->localCode == 1)
			{
				req->dnsp->header.rcode = RCODE_NAMEERROR;
				return 1;
			}
			break;

		case DNS_TYPE_NS:
			if (!strcasecmp(req->query, cfig.authority))
			{
				if (cfig.authorized)
				{
					addRRNSPtr(req);
					return 1;
				}
				else
				{
					req->dnsp->header.rcode = RCODE_NOTAUTH;
					return 1;
				}
			}
			else
			{
				req->localCode = makeLocal(req->mapname);
				if (req->localCode == 3)
				{
					if (cfig.authorized)
					{
						addRRNSA(req);
						return 1;
					}
					else
					{
						req->dnsp->header.rcode = RCODE_NOTAUTH;
						return 1;
					}
				}
			}
			return 0;

		case DNS_TYPE_SOA:

			req->localCode = makeLocal(req->mapname);
			if (req->localCode == 3)
			{
				if (cfig.authorized)
				{
					addRRSOA(req);
					return 1;
				}
				else
				{
					req->dnsp->header.rcode = RCODE_NOTAUTH;
					return 1;
				}
			}
			return 0;

		default:
			req->localCode = makeLocal(req->mapname);
			if (req->localCode)
			{
				req->dnsp->header.rcode = RCODE_NOTIMPL;
				return 1;
			}
			else
				return 0;
	}

	for (int m = 0; m < 3; m++)
	{
		//printf("%s has %u Entries\n", req->mapname, dnsCache[cacheInd].count(req->mapname));
		req->iterBegin = dnsCache[cacheInd].find(req->mapname);
		if (req->iterBegin != dnsCache[cacheInd].end() && req->iterBegin->second->expiry > time(NULL))
		{
			memcpy(&req->cache, req->iterBegin->second, sizeof(data7));
			//printf("mapname=%s, datatype=%i exp=%u\n",req->cache.mapname, req->cache.dataType,req->cache.expiry);

			switch (req->cache.dataType)
			{
				case LOCAL_A:
				case STATIC_A_AUTH:
					addRRA(req);
					addAuth(req);
					return 1;

				case LOCAL_PTR:
				case STATIC_PTR_AUTH:
				case SERVER_PTR_AUTH:
					addRRPtr(req);
					addAuth(req);
					return 1;

				case LOCALHOST_A:
					addRRLocalhostA(req);
					addAuth(req);
					return 1;

				case LOCALHOST_PTR:
					addRRLocalhostPtr(req);
					addAuth(req);
					return 1;

				case STATIC_A_NAUTH:
					addRRA(req);
					return 1;

				case SERVER_PTR_NAUTH:
				case STATIC_PTR_NAUTH:
					addRRPtr(req);
					return 1;

				case SERVER_A_AUTH:
					addRRServerA(req);
					addAuth(req);
					return 1;

				case SERVER_A_NAUTH:
					addRRServerA(req);
					return 1;

				case MX:
					addRRMX(req);
					return 1;

				case CACHED:
					addRRExt(req);
					return 1;

				case LOCAL_CNAME:
					sprintf(req->cname, "%s.%s", req->cache.hostname, cfig.zone);
					strcpy(req->mapname, req->cache.hostname);
					myLower(req->mapname);
					continue;

				case EXT_CNAME:
					strcpy(req->cname, req->cache.hostname);
					strcpy(req->mapname, req->cache.hostname);
					myLower(req->mapname);
					continue;

				default:
					break;
			}
		}

		break;
	}

	if (req->cache.dataType == LOCAL_CNAME)
	{
		addRRA(req);
		addAuth(req);
		return 1;
	}
	else if (req->cache.dataType == EXT_CNAME)
	{
		req->data = &req->dnsp->data;
		req->data += pQu(req->data, req->mapname);
		req->data += pShort(req->data, DNS_TYPE_A);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->bytes = (DWORD)req->data - (DWORD)req->raw;
	}
	else if (req->localCode == 1 || req->localCode == 3 || !req->dnsp->header.rd)
	{
		req->dnsp->header.rcode = RCODE_NAMEERROR;
		return 1;
	}

	return 0;
}

WORD fdnmess(data5 *req)
{
	bool tryDefault = true;
	BYTE zoneDNS;
	int nRet = -1;
	WORD qLen = strlen(req->query);

	for (zoneDNS = 0; zoneDNS < 32 && cfig.dnsRoutes[zoneDNS].dnLen; zoneDNS++)
	{
		if (qLen >= cfig.dnsRoutes[zoneDNS].dnLen)
		{
			char *dp = req->query + (qLen - cfig.dnsRoutes[zoneDNS].dnLen);
			//printf("%s=%s\n",dp,cfig.dnsRoutes[zoneDNS].zone);
			if (!strcasecmp(dp, cfig.dnsRoutes[zoneDNS].zone))
			{
				tryDefault = false;
				cfig.forwConn.addr.sin_family = AF_INET;
				cfig.forwConn.addr.sin_addr.s_addr = cfig.dnsRoutes[zoneDNS].dns;
				cfig.forwConn.addr.sin_port = htons(IPPORT_DNS);
				errno = 0;

				nRet = sendto(cfig.forwConn.sock,
				              req->raw,
				              req->bytes,
				              0,
				              (sockaddr*) & cfig.forwConn.addr,
				              sizeof(cfig.forwConn.addr));

				errno = WSAGetLastError();

				if (errno)
				{
					if (cfig.logLevel)
					{
						sprintf(logBuff, "Error %i Routing DNS Message to DNS %s", errno, IP2String(tempbuff, cfig.dnsRoutes[zoneDNS].dns));
						logMess(logBuff, 1);
					}
					return 0;
				}
				else if (nRet <= 0)
				{
					if (cfig.logLevel)
					{
						sprintf(logBuff, "Error Routing DNS Message to DNS %s", IP2String(tempbuff, cfig.dnsRoutes[zoneDNS].dns));
						logMess(logBuff, 1);
					}
					return 0;
				}
				else
				{
					if (cfig.logLevel == 2)
					{
						sprintf(logBuff, "%s Routed to DNS %s", req->cname, IP2String(tempbuff, cfig.dnsRoutes[zoneDNS].dns));
						logMess(logBuff, 2);
					}
				}
				break;
			}
		}
	}

	if (nRet <= 0 && req->localCode == 2)
	{
		req->dnsp->header.rcode = RCODE_NAMEERROR;
		return 1;
	}

	if (tryDefault)
	{
		if (!cfig.dns[0])
		{
			req->dnsp->header.rcode = RCODE_NAMEERROR;
			return 1;
		}

		//printf("Queries Awaited = %i currentDNS=%i\n", cfig.queriesFailed, cfig.currentDNS);
		if (cfig.queriesFailed >= 5)
		{
			cfig.queriesFailed = 0;

			if (cfig.dns[1])
			{
				cfig.currentDNS++;
				if (cfig.currentDNS >= MAX_SERVERS || !cfig.dns[cfig.currentDNS])
					cfig.currentDNS = 0;

				if (cfig.logLevel)
				{
					sprintf(logBuff, "Switching the Forwading DNS Server to %s", IP2String(tempbuff, cfig.dns[cfig.currentDNS]));
					logMess(logBuff, 1);
				}
			}
		}

		for (int i = 0; i < MAX_SERVERS && cfig.dns[i]; i++)
		{
			if (req->addr.sin_addr.s_addr != cfig.dns[cfig.currentDNS])
			{
				cfig.forwConn.addr.sin_family = AF_INET;
				cfig.forwConn.addr.sin_addr.s_addr = cfig.dns[cfig.currentDNS];
				cfig.forwConn.addr.sin_port = htons(IPPORT_DNS);
				errno = 0;

				nRet = sendto(cfig.forwConn.sock,
				              req->raw,
				              req->bytes,
				              0,
				              (sockaddr*) & cfig.forwConn.addr,
				              sizeof(cfig.forwConn.addr));

				errno = WSAGetLastError();

				if (errno)
				{
					if (cfig.logLevel)
					{
						sprintf(logBuff, "Error %i Forwading DNS Message to %s", errno, IP2String(tempbuff, cfig.dns[cfig.currentDNS]));
						logMess(logBuff, 1);
					}

					cfig.currentDNS++;
					if (cfig.currentDNS >= MAX_SERVERS || !cfig.dns[cfig.currentDNS])
						cfig.currentDNS = 0;

				}
				else if (nRet <= 0)
				{
					if (cfig.logLevel)
					{
						sprintf(logBuff, "Error Forwading DNS Message to %s", IP2String(tempbuff, cfig.dns[cfig.currentDNS]));
						logMess(logBuff, 1);
					}

					cfig.currentDNS++;
					if (cfig.currentDNS >= MAX_SERVERS || !cfig.dns[cfig.currentDNS])
						cfig.currentDNS = 0;
				}
				else
				{
					if (cfig.logLevel == 2)
					{
						sprintf(logBuff, "%s Forwarded to DNS %s", req->cname, IP2String(tempbuff, cfig.dns[cfig.currentDNS]));
						logMess(logBuff, 2);
					}
					break;
				}
			}
		}
	}

	if (nRet <= 0)
	{
		req->dnsp->header.rcode = RCODE_NAMEERROR;
		return 1;
	}

	char mapname[8];
	sprintf(mapname, "%u", req->dnsp->header.xid);
	data7 *queue = findEntry(cacheInd, mapname, QUEUE);

	if (!queue)
	{
		//checkSize();
		queue = (data7*)calloc(1, sizeof(data7));
		if (queue)
		{
			queue->mapname = cloneString(mapname);
			queue->source = (SOCKADDR_IN*)calloc(1, sizeof(SOCKADDR_IN));
			queue->query = cloneString(req->query);

			if (!queue->mapname || !queue->source || !queue->query)
			{
				if (queue->mapname)
					free(queue->mapname);

				if (queue->source)
					free(queue->source);

				if (queue->query)
					free(queue->query);

				free(queue);
				sprintf(logBuff, "Memory Allocation Error");
				logMess(logBuff, 1);
				return 0;
			}

			memcpy(queue->source, &req->addr, sizeof(SOCKADDR_IN));
			queue->expiry = 5 + time(NULL);
			queue->dataType = QUEUE;
			addEntry(cacheInd, queue);
		}
		else
		{
			sprintf(logBuff, "Memory Allocation Error");
			logMess(logBuff, 1);
			return 0;
		}
	}
	else
	{
		queue->expiry = 5 + time(NULL);
		memcpy(queue->source, &req->addr, sizeof(SOCKADDR_IN));

		if (strcasecmp(queue->query, req->query))
		{
			char *query = cloneString(req->query);

			if (query)
			{
				free(queue->query);
				queue->query = query;
			}
			else
			{
				sprintf(logBuff, "Memory Allocation Error");
				logMess(logBuff, 1);
				return 0;
			}
		}
	}

	queue->sockInd = req->sockInd;

	if (tryDefault)
	{
		queue->dnsIndex = cfig.currentDNS;
	}
	else
	{
		queue->dnsIndex = UCHAR_MAX;
	}

	return (nRet);
}

WORD frdnmess(data5 *req)
{
	socklen_t nRet = sizeof(cfig.forwConn.addr);
	errno = 0;

	req->bytes = recvfrom(cfig.forwConn.sock,
	                      req->raw,
	                      sizeof(req->raw),
	                      0,
	                      (sockaddr*) & cfig.forwConn.addr,
	                      &nRet);

	errno = WSAGetLastError();

	if (errno || req->bytes <= 0)
	{
		if (cfig.logLevel)
		{
			sprintf(logBuff, "Error %i Receiving Reply from Forwarding Server", errno);
			logMess(logBuff, 1);
		}
		return 0;
	}

	req->dnsp = (dnsPacket*)req->raw;

	char mapname[8];
	WORD type = 0;
	sprintf(mapname, "%u", req->dnsp->header.xid);
	data7 *queue = findEntry(cacheInd, mapname, QUEUE);

	if (queue && queue->expiry > time(NULL))
	{
		if (queue->dnsIndex == cfig.currentDNS)
			cfig.queriesFailed = 0;

		que

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区在线免费观看| 亚洲18女电影在线观看| 久久精品一区二区三区四区| 久久视频一区二区| 中文字幕在线观看不卡视频| 亚洲电影第三页| 欧美日本国产一区| 久久久99精品久久| 成人性生交大片免费看在线播放| 欧美视频一区二区三区四区 | 在线播放中文字幕一区| 精品99999| 亚洲尤物视频在线| www.久久久久久久久| 日韩一区二区免费视频| 亚洲人成电影网站色mp4| 精品一区免费av| 色综合 综合色| 国产亚洲欧美日韩日本| 99久久久免费精品国产一区二区| 精品日韩一区二区三区免费视频| 国产999精品久久| 欧美精品久久天天躁| 玖玖九九国产精品| 制服丝袜国产精品| 五月天久久比比资源色| 在线观看免费视频综合| 一区二区三区在线视频观看58| 欧美日韩美女一区二区| 狠狠色丁香婷婷综合| 日韩欧美一级片| 日韩1区2区3区| 欧美日韩一区二区三区免费看| 亚洲日本乱码在线观看| 99re这里只有精品首页| 丝袜美腿成人在线| 欧美精品一级二级三级| 国产高清无密码一区二区三区| 5858s免费视频成人| 丁香啪啪综合成人亚洲小说 | 中文天堂在线一区| 韩国理伦片一区二区三区在线播放| 日本一区二区电影| 99re这里都是精品| 久久99国产精品麻豆| 亚洲欧美在线观看| 日韩免费观看2025年上映的电影| 成人国产精品免费网站| 中文字幕在线不卡一区二区三区 | 久久99精品国产麻豆婷婷洗澡| 成人免费在线播放视频| 亚洲成人一二三| 国产免费观看久久| av日韩在线网站| 精品一区二区三区影院在线午夜| 亚洲免费成人av| 国产精品三级在线观看| 日韩欧美黄色影院| 欧美日韩一级黄| 色欲综合视频天天天| 成人激情开心网| 国产成人在线视频免费播放| 免费高清在线一区| 亚洲国产精品黑人久久久| 日韩欧美一二三| 3d动漫精品啪啪1区2区免费| 色哟哟亚洲精品| 97精品久久久午夜一区二区三区| 国产一区二区久久| 亚洲欧洲成人av每日更新| 2017欧美狠狠色| 欧美mv日韩mv国产| 日韩午夜精品电影| 日韩一区二区三区电影在线观看| 欧美日韩三级一区| 欧美视频日韩视频在线观看| 色婷婷激情一区二区三区| 91网站视频在线观看| 免费黄网站欧美| 欧美aaaaaa午夜精品| 日韩精品1区2区3区| 午夜婷婷国产麻豆精品| 亚洲成人精品一区| 偷拍亚洲欧洲综合| 喷白浆一区二区| 麻豆精品国产传媒mv男同 | 51精品视频一区二区三区| 欧美日韩在线亚洲一区蜜芽| 欧美性受xxxx| 69堂成人精品免费视频| 欧美一区二区三区在线观看| gogogo免费视频观看亚洲一| 成人av电影在线网| 在线视频国产一区| 欧美日韩高清影院| 91精品国产欧美一区二区成人| 日韩一卡二卡三卡国产欧美| 欧美本精品男人aⅴ天堂| 久久精品一区蜜桃臀影院| 最好看的中文字幕久久| 亚洲一区在线播放| 蜜臀va亚洲va欧美va天堂| 国产一区二区在线观看免费| 国产91富婆露脸刺激对白| 一本一道久久a久久精品| 欧美日本在线看| 26uuu精品一区二区在线观看| 欧美激情自拍偷拍| 一个色综合av| 美女在线一区二区| eeuss鲁片一区二区三区在线观看| 色综合网色综合| 国产精品一区一区三区| 亚洲欧美另类图片小说| 首页综合国产亚洲丝袜| 国产麻豆午夜三级精品| 91蜜桃视频在线| 91精品国产欧美日韩| 久久久久久久久一| 久久九九国产精品| 一区二区三区蜜桃网| 毛片av一区二区| www.日韩大片| 日韩西西人体444www| 国产精品高潮呻吟久久| 最新不卡av在线| 亚洲成年人网站在线观看| 激情六月婷婷综合| 欧洲色大大久久| 久久欧美中文字幕| 亚洲成人综合网站| 91在线云播放| 久久婷婷综合激情| 亚洲成人av一区二区| 成人晚上爱看视频| 日韩视频一区二区三区在线播放| 国产精品家庭影院| 精品综合免费视频观看| 欧美影视一区在线| 国产精品萝li| 狠狠色综合播放一区二区| 欧美在线|欧美| 国产精品毛片大码女人| 偷拍与自拍一区| 日本黄色一区二区| 正在播放亚洲一区| 亚洲另类在线一区| 日本欧美大码aⅴ在线播放| 91年精品国产| 国产精品久久久久永久免费观看 | 一本久久a久久精品亚洲| 久久网站热最新地址| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩在线播| 亚洲精品日日夜夜| 99久久亚洲一区二区三区青草| 2欧美一区二区三区在线观看视频| 亚洲va欧美va人人爽午夜| 91在线看国产| 中文字幕在线观看不卡视频| 国产精品一区二区果冻传媒| 日韩欧美高清一区| 日本成人在线电影网| 欧美日韩成人综合在线一区二区| 亚洲精品一二三| 成人高清av在线| 国产精品天美传媒| 国产a久久麻豆| 国产亚洲成年网址在线观看| 激情久久五月天| 亚洲国产精品综合小说图片区| 日韩精品每日更新| 欧美一区二区在线免费播放| 午夜精品一区二区三区电影天堂 | 日韩黄色免费网站| 欧美日韩亚洲不卡| 日韩中文字幕不卡| 欧美成人精品二区三区99精品| 青椒成人免费视频| 精品国产91亚洲一区二区三区婷婷 | 日韩福利视频导航| 日韩欧美中文一区二区| 另类成人小视频在线| 久久伊人中文字幕| 成人黄色一级视频| 亚洲男帅同性gay1069| 91福利视频网站| 日韩vs国产vs欧美| 久久久噜噜噜久噜久久综合| 成人一道本在线| 亚洲欧美日韩国产中文在线| 欧美色视频一区| 精品一区二区免费在线观看| 久久久午夜精品理论片中文字幕| 国产成人免费视频网站 | 欧美日韩国产小视频在线观看| 爽好久久久欧美精品| 久久亚洲免费视频| 一本大道久久a久久精二百| 视频一区在线播放|