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

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

?? dualserver.cpp

?? Combined DHCP/DNS Server. DHCP Server allots addresses and DNS Server first try resolving from DHCP
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
		req->data += 2;
		req->data += pQu(req->data, cfig.servername_fqn);
		sprintf(req->cname, "mail.%s", cfig.zone);
		req->data += pQu(req->data, req->cname);
		req->data += pLong(req->data, cfig.serial);
		req->data += pLong(req->data, cfig.refresh);
		req->data += pLong(req->data, cfig.retry);
		req->data += pLong(req->data, cfig.expire);
		req->data += pLong(req->data, cfig.minimum);
		pShort(data, (DWORD)req->data - (DWORD)data - 2);
	}
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addAuth(data5 *req)
{
	if (cfig.authorized && cfig.expireTime > time(NULL))
	{
		req->dnsp->header.at = 1;
		req->dnsp->header.aa = 1;

		req->dnsp->header.nscount = htons(1);
		req->dnsp->header.adcount = htons(1);

		if (req->qtype == DNS_TYPE_PTR)
			req->data += pQu(req->data, cfig.authority);
		else
			req->data += pQu(req->data, cfig.zone);

		req->data += pShort(req->data, DNS_TYPE_NS);
		req->data += pShort(req->data, DNS_CLASS_IN);

		if (cfig.expire >= LONG_MAX)
			req->data += pLong(req->data, LONG_MAX);
		else
			req->data += pLong(req->data, cfig.expire);

		req->data += pShort(req->data, qLen(cfig.servername_fqn));
		req->data += pQu(req->data, cfig.servername_fqn);

		req->data += pQu(req->data, cfig.servername_fqn);
		req->data += pShort(req->data, DNS_TYPE_A);
		req->data += pShort(req->data, DNS_CLASS_IN);

		if (cfig.expire >= LONG_MAX)
			req->data += pLong(req->data, LONG_MAX);
		else
			req->data += pLong(req->data, cfig.expire);

		req->data += pShort(req->data, 4);
		req->data += pIP(req->data, cfig.dnsUdpConn[req->sockInd].server);
	}
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRAAFXR(data5 *req)
{
	req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);

	if (!strchr(req->iterBegin->second->mapname, '.'))
		sprintf(req->cname, "%s.%s", req->iterBegin->second->mapname, cfig.zone);
	else
		strcpy(req->cname, req->iterBegin->second->mapname);

	req->data += pQu(req->data, req->cname);
	req->data += pShort(req->data, DNS_TYPE_A);
	req->data += pShort(req->data, DNS_CLASS_IN);

	if (req->iterBegin->second->expiry - time(NULL) >= cfig.lease)
		req->data += pLong(req->data, cfig.lease - 1);
	else
		req->data += pLong(req->data, (req->iterBegin->second->expiry - time(NULL) - 1));

	req->data += pShort(req->data, 4);
	req->data += pIP(req->data, req->iterBegin->second->ip);
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRSTAFXR(data5 *req)
{
	req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);

	if (!strchr(req->iterBegin->second->mapname, '.'))
		sprintf(req->cname, "%s.%s", req->iterBegin->second->mapname, cfig.zone);
	else
		strcpy(req->cname, req->iterBegin->second->mapname);

	req->data += pQu(req->data, req->cname);
	req->data += pShort(req->data, DNS_TYPE_A);
	req->data += pShort(req->data, DNS_CLASS_IN);
	req->data += pLong(req->data, cfig.lease);
	req->data += pShort(req->data, 4);
	req->data += pIP(req->data, req->iterBegin->second->ip);
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRCNAFXR(data5 *req)
{
	req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);

	if (!strchr(req->iterBegin->second->mapname, '.'))
		sprintf(req->cname, "%s.%s", req->iterBegin->second->mapname, cfig.zone);
	else
		strcpy(req->cname, req->iterBegin->second->mapname);

	req->data += pQu(req->data, req->cname);
	req->data += pShort(req->data, DNS_TYPE_CNAME);
	req->data += pShort(req->data, DNS_CLASS_IN);
	req->data += pLong(req->data, cfig.lease);

	if (!strchr(req->iterBegin->second->hostname, '.'))
		sprintf(req->cname, "%s.%s", req->iterBegin->second->hostname, cfig.zone);
	else
		strcpy(req->cname, req->iterBegin->second->hostname);

	req->data += pShort(req->data, qLen(req->cname));
	req->data += pQu(req->data, req->cname);
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRMXAFXR(data5 *req)
{
	data7 *cache = req->iterBegin->second;
	req->data += pQu(req->data, req->query);
	req->data += pShort(req->data, DNS_TYPE_MX);
	req->data += pShort(req->data, DNS_CLASS_IN);
	req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
	req->data += pLong(req->data, cfig.lease);

	if (!strchr(cache->hostname, '.'))
		sprintf(req->cname, "%s.%s", cache->hostname, cfig.zone);
	else
		strcpy(req->cname, cache->hostname);

	req->data += pShort(req->data, qLen(req->cname) + 2);
	req->data += pShort(req->data, cache->mailPref);
	req->data += pQu(req->data, req->cname);
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

WORD gdnmess(data5 *req, BYTE sockInd)
{
	memset(req, 0, sizeof(data5));
	socklen_t nLen = sizeof(req->addr);
	errno = 0;

	req->bytes = recvfrom(cfig.dnsUdpConn[sockInd].sock,
	                      req->raw,
	                      sizeof(req->raw),
	                      0,
	                      (sockaddr*) &req->addr,
	                      &nLen);

	errno = WSAGetLastError();

	if (errno || req->bytes <= 0)
	{
		if (cfig.logLevel)
		{
			sprintf(logBuff, "Error %i Getting DNS Message", errno);
			logMess(logBuff, 1);
		}
		return 0;
	}

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

	if (req->dnsp->header.qr != 0 || ntohs(req->dnsp->header.qdcount) != 1 || ntohs(req->dnsp->header.ancount))
	{
		req->dnsp->header.rcode = RCODE_NOTIMPL;
		return req->bytes;
	}

	req->data = &req->dnsp->data;
	for (int i = 1; i <= ntohs(req->dnsp->header.qdcount); i++)
	{
		req->data += fQu(req->query, req->dnsp, req->data);
		req->qtype = fShort(req->data);
		req->data += 2;
		req->qclass = fShort(req->data);
		req->data += 2;
	}

	if (req->qclass != DNS_CLASS_IN || !req->qtype)
	{
		req->dnsp->header.rcode = RCODE_NOTIMPL;
		return req->bytes;
	}

	DWORD iip = ntohl(req->addr.sin_addr.s_addr);

	for (int i = 0; i < 32 && cfig.dnsRanges[i].rangeStart; i++)
	{
		if (iip >= cfig.dnsRanges[i].rangeStart && iip <= cfig.dnsRanges[i].rangeEnd)
			return req->bytes;
	}

	for (int i = 0; i < 32 && cfig.dhcpRanges[i].rangeStart; i++)
	{
		if (iip >= cfig.dhcpRanges[i].rangeStart && iip <= cfig.dhcpRanges[i].rangeEnd)
			return req->bytes;
	}

	if (findEntry(cacheInd, IP2String(req->cname, iip)))
		return req->bytes;

	if (req->addr.sin_addr.s_addr == cfig.zoneServers[0] || req->addr.sin_addr.s_addr == cfig.zoneServers[1])
		return req->bytes;

	req->dnsp->header.rcode = RCODE_REFUSED;
	return req->bytes;
}

void procTCP(void *lpParam)
{
	//printf("Here\n");
	data5 *req = (data5*)lpParam;
	char logBuff[256];
	errno = 0;
	req->bytes = recv(req->sock, req->raw, sizeof(req->raw), 0);
	errno = WSAGetLastError();

	if (errno || req->bytes <= 0)
	{
		if (cfig.logLevel)
		{
			sprintf(logBuff, "Error %i Getting DNS Message", errno);
			logMess(logBuff, 1);
		}
		closesocket(req->sock);
		free(req);
		_endthread();
		return ;
	}

	WORD pktSize = fShort(req->raw);
	req->data = req->raw;
	req->data += 2;
	req->dnsp = (dnsPacket*)(req->data);

	if (req->dnsp->header.qr != 0 || ntohs(req->dnsp->header.qdcount) != 1 || ntohs(req->dnsp->header.ancount))
	{
		req->dnsp->header.rcode = RCODE_NOTIMPL;
		sTCPmess(req);
		closesocket(req->sock);
		free(req);
		_endthread();
		return ;
		;
	}

	req->data = &req->dnsp->data;
	for (int i = 1; i <= ntohs(req->dnsp->header.qdcount); i++)
	{
		req->data += fQu(req->query, req->dnsp, req->data);
		req->qtype = fShort(req->data);
		req->data += 2;
		req->qclass = fShort(req->data);
		req->data += 2;
	}

	if (req->qclass != DNS_CLASS_IN || !req->qtype)
	{
		req->dnsp->header.rcode = RCODE_NOTIMPL;
		sTCPmess(req);
		closesocket(req->sock);
		free(req);
		_endthread();
		return ;
	}

	bool allowed = false;

	DWORD ip = req->addr.sin_addr.s_addr;

	for (int i = 0; i < MAX_SERVERS; i++)
	{
		if (ip == cfig.zoneServers[i] || ip == cfig.servers[i])
		{
			allowed = true;
			break;
		}
	}

	if (!allowed)
	{
		sprintf(logBuff, "Client %s, TCP Query, Access Denied", inet_ntoa(req->addr.sin_addr));
		logMess(logBuff, 1);
		req->dnsp->header.rcode = RCODE_REFUSED;
		sTCPmess(req);
		closesocket(req->sock);
		free(req);
		_endthread();
		return ;
	}

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

	if (ntohs(req->dnsp->header.qdcount) == 1 && ntohs(req->dnsp->header.opcode) == 0)
	{
		req->dnsp->header.ancount = 0;
		req->dnsp->header.nscount = 0;
		req->dnsp->header.adcount = 0;
		req->dnsp->header.ra = 0;
		bool AXFRError = false;

		switch (req->qtype)
		{
			case DNS_TYPE_SOA:
				if (!strcasecmp(req->mapname, cfig.zone))
				{
					req->dnsp->header.aa = 0;
					req->dnsp->header.at = 0;
					addRRSOA(req);
					sTCPmess(req);
					sprintf(logBuff, "Client %s, SOA Sent", inet_ntoa(req->addr.sin_addr));
					logMess(logBuff, 2);
				}
				break;

			case DNS_TYPE_AXFR:
			case DNS_TYPE_IXFR:

				if (!strcasecmp(req->mapname, cfig.zone))
				{
					DWORD tempserial = cfig.serial;
					WORD records = 0;

					req->dnsp->header.qdcount = 0;
					req->dnsp->header.ancount = 0;
					req->data = &req->dnsp->data;
					addRRSOA(req);

					if (!sTCPmess(req))
					{
						AXFRError = true;
						break;
					}
					else
						records++;

					time_t currTime = time(NULL);
					req->iterBegin = dnsCache[cacheInd].begin();

					while (!AXFRError && req->iterBegin != dnsCache[cacheInd].end())
					{
						req->dnsp->header.ancount = 0;
						req->data = &req->dnsp->data;

						if (req->iterBegin->second->expiry > currTime)
						{
							switch (req->iterBegin->second->dataType)
							{
								case LOCAL_A:
									addRRAAFXR(req);
									break;

								case SERVER_A_AUTH:
									if (cfig.dnsTcpConn[req->sockInd].server == req->iterBegin->second->ip)
										addRRSTAFXR(req);
									else
									{
										req->iterBegin++;
										continue;
									}
									break;

								case STATIC_A_AUTH:
								case STATIC_A_NAUTH:
									addRRSTAFXR(req);
									break;

								case LOCAL_CNAME:
								case EXT_CNAME:
									addRRCNAFXR(req);
									break;

								case MX:
									addRRMXAFXR(req);
									break;

								default:
									req->iterBegin++;
									continue;
							}

							if (tempserial != cfig.serial)
							{
								AXFRError = true;
								break;
							}

							if (!sTCPmess(req))
							{
								AXFRError = true;
								break;
							}
							else
								records++;

						}
						req->iterBegin++;
					}

					req->dnsp->header.ancount = 0;
					req->data = &req->dnsp->data;
					addRRSOA(req);

					if (!AXFRError && tempserial == cfig.serial)
					{
						if (sTCPmess(req))
						{
							records++;
							sprintf(logBuff, "Client %s, Zone with %u RRs Sent", inet_ntoa(req->addr.sin_addr), records);
							logMess(logBuff, 2);
						}
					}
				}
				else
				{
					req->dnsp->header.rcode = RCODE_NOTAUTH;
					sTCPmess(req);
					sprintf(logBuff, "Client %s, Server is not Authorized for Zone %s", inet_ntoa(req->addr.sin_addr), req->query);
					logMess(logBuff, 1);
				}
				break;

			default:
				req->dnsp->header.rcode = RCODE_NOTIMPL;
				sTCPmess(req);
				sprintf(logBuff, "Client %s, DNS Query Type %u not supported", inet_ntoa(req->addr.sin_addr), req->qtype);
				logMess(logBuff, 1);
		}
	}
	closesocket(req->sock);
	free(req);
	_endthread();
	return;
}

WORD sTCPmess(data5 *req)
{
	req->dnsp->header.qr = 1;
	errno = 0;

	pShort(req->raw, req->bytes - 2);
	req->bytes = send(req->sock, req->raw, req->bytes, 0);

	errno = WSAGetLastError();

	if (errno)
	{
		if (cfig.logLevel)
		{
			sprintf(logBuff, "Error %i sending DNS Reply", errno);
			logMess(logBuff, 1);
		}
		return 0;
	}
	else if (req->bytes <= 0)
		return 0;

	return req->bytes;
}

WORD sdnmess(data5 *req)
{
	req->dnsp->header.qr = 1;
	errno = 0;

	req->bytes = sendto(cfig.dnsUdpConn[req->sockInd].sock,
	                    req->raw,
	                    req->bytes,
	                    0,
	                    (sockaddr*) & req->addr,
	                    sizeof(req->addr));

	errno = WSAGetLastError();

	if (errno)
	{
		if (cfig.logLevel)
		{
			sprintf(logBuff, "Error %i sending DNS Reply", errno);
			logMess(logBuff, 1);
		}
		return 0;
	}
	else if (req->bytes <= 0)
		return 0;

	return req->bytes;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频一二三区| 欧美乱妇23p| 国产精品麻豆久久久| 国产成人高清在线| 欧美高清在线精品一区| 国产91丝袜在线播放0| 国产精品久久久久毛片软件| 91污在线观看| 亚洲成av人片在www色猫咪| 91精品国产乱| 国产一区二区三区黄视频| 三级精品在线观看| 日韩三级在线免费观看| 韩国一区二区视频| 国产精品免费网站在线观看| 91免费观看视频在线| 亚洲午夜一区二区三区| 日韩午夜中文字幕| 北岛玲一区二区三区四区| 亚洲一区在线观看视频| 精品欧美一区二区在线观看| 成人av片在线观看| 亚洲成人av资源| 久久久国产精品不卡| 在线观看免费成人| 国产麻豆午夜三级精品| 日韩美女久久久| 欧美一级二级三级乱码| 99久久久免费精品国产一区二区| 亚洲丰满少妇videoshd| 国产欧美日韩综合精品一区二区| 91在线高清观看| 美女www一区二区| 一区二区三区欧美在线观看| 日韩一区二区三区四区五区六区| 99久久精品国产观看| 婷婷丁香久久五月婷婷| 中文在线一区二区| 日韩欧美精品三级| 色婷婷一区二区三区四区| 黑人巨大精品欧美黑白配亚洲 | 欧美日本在线一区| 国产丶欧美丶日本不卡视频| 亚洲国产精品视频| 国产精品久久久久永久免费观看| 这里只有精品视频在线观看| 成人动漫一区二区在线| 久久99国内精品| 偷拍自拍另类欧美| 亚洲婷婷在线视频| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美伊人久久大香线蕉综合69| 国产suv精品一区二区883| 蜜臀av性久久久久蜜臀aⅴ| 亚洲愉拍自拍另类高清精品| 中文字幕电影一区| 久久免费看少妇高潮| 欧美一区二区在线免费播放| 在线观看日韩毛片| 91.xcao| 欧美图片一区二区三区| 91在线无精精品入口| 国产精品2024| 国产综合色视频| 免费高清在线一区| 免费一级欧美片在线观看| 一区二区日韩av| 亚洲综合色噜噜狠狠| 亚洲私人黄色宅男| 日韩伦理免费电影| 亚洲欧美在线aaa| 国产精品三级电影| 中文字幕欧美一区| 亚洲欧美日韩系列| 亚洲少妇30p| 亚洲精品成a人| 亚洲一区二区在线观看视频| 亚洲精品日产精品乱码不卡| 中文字幕一区二区三区色视频| 国产亚洲精品福利| 亚洲国产精品黑人久久久| 国产精品拍天天在线| 国产欧美久久久精品影院| 国产婷婷一区二区| 中文字幕精品综合| 中文字幕亚洲欧美在线不卡| 国产欧美视频一区二区| 亚洲欧洲另类国产综合| 综合电影一区二区三区| 亚洲综合一区二区| 免费观看91视频大全| 国产在线精品不卡| 风间由美一区二区av101| 91丨九色丨蝌蚪富婆spa| 91九色02白丝porn| 欧美精品久久一区二区三区| 日韩西西人体444www| 久久久久久久精| 日韩美女视频19| 秋霞成人午夜伦在线观看| 激情都市一区二区| 日韩欧美久久久| 2023国产精品视频| 亚洲乱码精品一二三四区日韩在线| 尤物视频一区二区| 麻豆精品新av中文字幕| 不卡一区二区三区四区| 欧美三级中文字幕在线观看| 日韩欧美精品在线| 日韩理论电影院| 免费高清在线一区| 91视频com| 国产一区二区三区国产| 狠狠色丁香九九婷婷综合五月| 成人动漫精品一区二区| 国产精品夜夜爽| 日本精品视频一区二区| 538prom精品视频线放| 亚洲小说欧美激情另类| 日韩精品中文字幕一区| 欧洲国内综合视频| 色呦呦日韩精品| 精品久久久久久无| 免播放器亚洲一区| 9色porny自拍视频一区二区| 欧美日韩国产a| 国产亚洲婷婷免费| 亚洲成a人片在线观看中文| 国产精品亚洲一区二区三区在线 | 国产精品色婷婷| 五月天亚洲精品| 成人免费视频视频| 日韩精品一区二区三区swag| 亚洲免费在线看| 丁香婷婷综合色啪| 欧美一区二区三区播放老司机| 亚洲婷婷在线视频| 国产91精品免费| 日韩欧美亚洲国产另类| 亚洲一线二线三线久久久| 成人黄色av网站在线| 久久综合成人精品亚洲另类欧美| 亚洲午夜在线视频| 91碰在线视频| 国产香蕉久久精品综合网| 日韩1区2区日韩1区2区| 91高清视频免费看| 中文字幕视频一区| 激情综合色综合久久| 91精品麻豆日日躁夜夜躁| 亚洲男人的天堂在线观看| 成人一道本在线| 久久久久久97三级| 国产乱码字幕精品高清av| 欧美电视剧在线观看完整版| 视频一区二区三区中文字幕| 欧美在线不卡一区| 一区二区三区在线视频观看58| 99国产精品久久久久久久久久久 | 一区二区激情小说| 不卡av电影在线播放| 国产欧美一区二区精品秋霞影院| 极品销魂美女一区二区三区| 91精品福利在线一区二区三区| 亚洲高清一区二区三区| 欧美精选在线播放| 日韩精品亚洲一区| 日韩精品一区二区三区中文不卡| 日本欧美在线观看| 日韩亚洲欧美综合| 国产一区二区福利视频| 国产欧美一区视频| 不卡高清视频专区| 樱桃国产成人精品视频| 欧美日韩一区二区三区免费看| 午夜精品久久久久久不卡8050| 3751色影院一区二区三区| 捆绑调教一区二区三区| 久久久久久日产精品| 成人午夜伦理影院| 亚洲女厕所小便bbb| 欧美色网一区二区| 日本aⅴ免费视频一区二区三区| 日韩一区二区在线观看视频播放| 久久成人精品无人区| 久久精品视频免费| 97aⅴ精品视频一二三区| 亚洲一区二区三区中文字幕在线| 欧美日韩一区二区三区四区五区 | 亚洲男同性视频| 欧美日韩激情在线| 另类综合日韩欧美亚洲| 国产午夜亚洲精品理论片色戒| 91在线观看视频| 免费日本视频一区| 国产欧美精品区一区二区三区| 91天堂素人约啪| 免费成人在线播放| 日本一二三不卡| 欧美绝品在线观看成人午夜影视|