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

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

?? dualserver.cpp

?? Combined DHCP/DNS Server. DHCP Server allots addresses and DNS Server first try resolving from DHCP
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	BYTE *xname = (BYTE*)query;
	BYTE *xraw = (BYTE*)raw;
	WORD retvalue = 0;
	while (true)
	{
		WORD size = *xraw;
		xraw++;
		if (!size)
		{
			break;
		}
		memcpy(xname, xraw, size);
		xname += size;
		xraw += size;
		retvalue += size;
		if (!*xraw)
			break;
		*xname = '.';
		retvalue++;
		xname++;
	}
	*xname = 0;
	retvalue += 2;

	//printf("%u\n",retvalue);
	return retvalue;
}

WORD qLen(char *query)
{
	WORD fullsize = 1;
	while (true)
	{
		char *i = strchr(query, '.');
		if (i != NULL)
		{
			int size = (DWORD)i - (DWORD)query;
			query += (size + 1);
			fullsize += (size + 1);
		}
		else
		{
			int size = strlen(query);
			if (size)
				fullsize += (size + 1);
			break;
		}
	}
	//printf("%i\n",fullsize);
	return fullsize;
}

WORD pQu(char *raw, char *query)
{
	WORD fullsize = 1;
	while (true)
	{
		char *i = strchr(query, '.');
		if (i != NULL)
		{
			int size = (DWORD)i - (DWORD)query;
			*raw = size;
			raw++;
			memcpy(raw, query, size);
			raw += size;
			query += (size + 1);
			fullsize += (size + 1);
		}
		else
		{
			int size = strlen(query);
			if (size)
			{
				*raw = size;
				raw++;
				strcpy(raw, query);
				fullsize += (size + 1);
			}
			break;
		}
	}
	//printf("%i\n",fullsize);
	return fullsize;
}

WORD fShort(char *raw)
{
	return ntohs(*(WORD*)raw);
}

DWORD fLong(char *raw)
{
	return ntohl(*(DWORD*)raw);
}

DWORD fIP(char *raw)
{
	return (*(DWORD*)raw);
}

BYTE pShort(char *raw, WORD data)
{
	*((WORD*)raw) = htons(data);
	return 2;
}

BYTE pLong(char *raw, DWORD data)
{
	*((DWORD*)raw) = htonl(data);
	return 4;
}

BYTE pIP(char *raw, DWORD data)
{
	*((DWORD*)raw) = data;
	return 4;
}

WORD fShort(BYTE *raw)
{
	return ntohs(*(WORD*)raw);
}

DWORD fLong(BYTE *raw)
{
	return ntohl(*(DWORD*)raw);
}

DWORD fIP(BYTE *raw)
{
	return (*(DWORD*)raw);
}

BYTE pShort(BYTE *raw, WORD data)
{
	*((WORD*)raw) = htons(data);
	return 2;
}

BYTE pLong(BYTE *raw, DWORD data)
{
	*((DWORD*)raw) = htonl(data);
	return 4;
}

BYTE pIP(BYTE *raw, DWORD data)
{
	*((DWORD*)raw) = data;
	return 4;
}

void addRRExt(data5 *req)
{
	WORD xid = req->dnsp->header.xid;

	if (strcasecmp(req->cname, req->query))
	{
		dnsPacket *packet;

		if (req->cache.response)
			packet = (dnsPacket*)req->cache.response;
		else
		{
			packet = (dnsPacket*)malloc(req->bytes);
			memcpy(packet, req->dnsp, req->bytes);
		}

		req->dnsp->header.aa = 0;
		req->dnsp->header.at = 0;
		req->dnsp->header.qdcount = htons(1);
		req->dnsp->header.ancount = htons(1);

		//manuplate the response
		req->data = &req->dnsp->data;
		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_A);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_CNAME);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->data += pLong(req->data, cfig.lease);
		req->data += pShort(req->data, qLen(req->cname));
		req->data += pQu(req->data, req->cname);

		char *dp = &packet->data;

		for (int i = 1; i <= ntohs(packet->header.qdcount); i++)
		{
			dp += fQu(req->cname, packet, dp);
			dp += 4;
		}

		WORD dl = 0;
		for (int i = 1; i <= ntohs(packet->header.ancount); i++)
		{
			dp += fQu(req->cname, packet, dp);
			req->data += pQu(req->data, req->cname);
			memcpy(req->data, dp, 8);
			req->data += 8;
			int type = fShort(dp);
			dp += 2; //type
			dp += 2; //class
			dp += 4; //ttl
			WORD zLen = fShort(dp);
			dp += 2; //datalength

			switch (type)
			{
				case DNS_TYPE_A:
					req->data += pShort(req->data, zLen);
					req->data += pLong(req->data, fLong(dp));
					break;
				case DNS_TYPE_CNAME:
					fQu(req->cname, packet, dp);
					dl = pQu(req->data + 2, req->cname);
					req->data += pShort(req->data, dl);
					req->data += dl;
					break;
			}
			dp += zLen;
			req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
		}

		if (!req->cache.response)
			free(packet);

		req->bytes = (DWORD)req->data - (DWORD)req->raw;

	}
	else if (req->cache.response)
	{
		memcpy(req->dnsp, req->cache.response, req->cache.bytes);
		req->dnsp->header.xid = xid;
		req->bytes = req->cache.bytes;
	}
};

void addRRA(data5 *req)
{
	if (strcasecmp(req->query, req->cname))
	{
		req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_CNAME);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->data += pLong(req->data, cfig.lease);
		req->data += pShort(req->data, qLen(req->cname));
		req->data += pQu(req->data, req->cname);
	}

	for (;req->iterBegin != dnsCache[cacheInd].end(); req->iterBegin++)
	{
		data7 *cache = req->iterBegin->second;

		if (strcasecmp(cache->mapname, req->mapname))
			break;

		if (cache->ip)
		{
			req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
			req->data += pQu(req->data, req->cname);
			req->data += pShort(req->data, DNS_TYPE_A);
			req->data += pShort(req->data, DNS_CLASS_IN);

			if (cache->expiry == LONG_MAX)
				req->data += pLong(req->data, cfig.lease);
			else
				req->data += pLong(req->data, (cache->expiry - time(NULL)));

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

void addRRPtr(data5 *req)
{
	for (;req->iterBegin != dnsCache[cacheInd].end(); req->iterBegin++)
	{
		data7 *cache = req->iterBegin->second;

		if (strcasecmp(cache->mapname, req->mapname))
			break;

		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_PTR);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);

		if (cache->expiry == LONG_MAX)
			req->data += pLong(req->data, cfig.lease);
		else
			req->data += pLong(req->data, (cache->expiry - time(NULL)));

		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));
		req->data += pQu(req->data, req->cname);
	}
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRServerA(data5 *req)
{
	if (strcasecmp(req->query, req->cname))
	{
		req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_CNAME);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->data += pLong(req->data, cfig.lease);
		req->data += pShort(req->data, qLen(req->cname));
		req->data += pQu(req->data, req->cname);
	}

	req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
	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, cfig.dnsUdpConn[req->sockInd].server);

	for (;req->iterBegin != dnsCache[cacheInd].end(); req->iterBegin++)
	{
		data7 *cache = req->iterBegin->second;

		if (strcasecmp(cache->mapname, req->mapname))
			break;

		if (cache->ip && cache->ip != cfig.dnsUdpConn[req->sockInd].server)
		{
			req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
			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, cache->ip);
		}
	}
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRLocalhostA(data5 *req)
{
	if (strcasecmp(req->query, req->mapname))
	{
		req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_CNAME);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->data += pLong(req->data, cfig.lease);
		req->data += pShort(req->data, qLen(req->mapname));
		req->data += pQu(req->data, req->mapname);
	}

	req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);
	req->data += pQu(req->data, req->mapname);
	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->cache.ip);
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRLocalhostPtr(data5 *req)
{
	req->data += pQu(req->data, req->query);
	req->data += pShort(req->data, DNS_TYPE_PTR);
	req->data += pShort(req->data, DNS_CLASS_IN);
	req->dnsp->header.ancount = htons(1);
	req->data += pLong(req->data, cfig.lease);
	req->data += pShort(req->data, qLen(req->cache.hostname));
	req->data += pQu(req->data, req->cache.hostname);
	req->bytes = (DWORD)req->data - (DWORD)req->raw;
}

void addRRMX(data5 *req)
{
	for (;req->iterBegin != dnsCache[cacheInd].end(); req->iterBegin++)
	{
		data7 *cache = req->iterBegin->second;

		if (strcasecmp(cache->mapname, req->mapname))
			break;

		if (cache->dataType == MX)
		{
			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;
}

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

		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 addRRNSPtr(data5 *req)
{
	if (cfig.authorized && cfig.expireTime > time(NULL))
	{
		req->dnsp->header.at = 1;
		req->dnsp->header.aa = 1;
		req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);

		req->data += pQu(req->data, cfig.authority);
		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 addRRSOA(data5 *req)
{
	if (cfig.authorized)
	{
		req->dnsp->header.at = 1;
		req->dnsp->header.aa = 1;
		req->dnsp->header.ancount = htons(htons(req->dnsp->header.ancount) + 1);

		req->data += pQu(req->data, req->query);
		req->data += pShort(req->data, DNS_TYPE_SOA);
		req->data += pShort(req->data, DNS_CLASS_IN);
		req->data += pLong(req->data, cfig.lease);
		char *data = req->data;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区蜜桃| 久久久www成人免费毛片麻豆| 亚洲黄网站在线观看| 色综合天天做天天爱| 国产精品国产自产拍高清av| 成人动漫一区二区| 亚洲女同ⅹxx女同tv| 2021国产精品久久精品| 成人黄色av电影| 一级精品视频在线观看宜春院| 欧美性猛交一区二区三区精品| 丝袜美腿高跟呻吟高潮一区| 精品日韩一区二区| 国产·精品毛片| 亚洲一区二区三区四区在线观看| 欧美日韩高清一区二区三区| 久久国产人妖系列| ...av二区三区久久精品| 欧美三区免费完整视频在线观看| 免费看日韩a级影片| 久久精品视频免费| 欧美丝袜第三区| 高清国产一区二区三区| 亚洲成av人片在线观看| 国产午夜亚洲精品理论片色戒 | 亚洲国产精品久久人人爱蜜臀 | 伊人色综合久久天天| 欧美日韩一区二区欧美激情| 免费精品99久久国产综合精品| 国产精品视频线看| 欧美一级免费大片| 99久久综合色| 日日骚欧美日韩| 中文字幕一区二区三区色视频| 777a∨成人精品桃花网| 成人激情开心网| 久久99精品久久久| 亚洲高清免费视频| 欧美激情综合五月色丁香小说| 欧美人狂配大交3d怪物一区| 丰满岳乱妇一区二区三区| 日精品一区二区三区| 综合精品久久久| 久久人人超碰精品| 91麻豆精品国产91久久久使用方法 | 一区二区三区在线不卡| 精品国产91亚洲一区二区三区婷婷| 色综合夜色一区| 成人综合在线观看| 久久99精品国产麻豆婷婷 | 91麻豆精品91久久久久久清纯| 成人精品视频.| 精品一区二区影视| 亚洲一区成人在线| 日韩一区日韩二区| 国产偷国产偷精品高清尤物| 日韩欧美在线影院| 欧美亚洲国产bt| 91蜜桃传媒精品久久久一区二区| 久久97超碰国产精品超碰| 亚洲国产精品久久不卡毛片| 欧美韩国日本综合| 国产亚洲成av人在线观看导航| 欧美一级久久久久久久大片| 欧美日韩在线播放一区| 久久九九影视网| 日韩美女主播在线视频一区二区三区| 在线免费亚洲电影| 一本大道久久a久久综合婷婷| 成人影视亚洲图片在线| 国产精品中文有码| 国产在线精品一区二区不卡了| 日av在线不卡| 美国av一区二区| 麻豆传媒一区二区三区| 久久精品理论片| 精品一区二区三区欧美| 久久99精品国产麻豆不卡| 麻豆精品一区二区| 久久99久久99精品免视看婷婷| 久久www免费人成看片高清| 蜜桃视频一区二区三区| 麻豆视频一区二区| 韩国三级中文字幕hd久久精品| 久久不见久久见免费视频1| 久久国产日韩欧美精品| 国内成人自拍视频| 精品亚洲aⅴ乱码一区二区三区| 蜜臀av在线播放一区二区三区| 奇米777欧美一区二区| 国产综合色产在线精品| 国产精品一线二线三线| 99久久伊人久久99| 欧美在线免费观看亚洲| 欧美酷刑日本凌虐凌虐| 日韩精品影音先锋| 久久蜜桃av一区二区天堂| 中文字幕一区二区三区在线不卡 | 久久av老司机精品网站导航| 免费在线观看视频一区| 国产精品一区二区x88av| 成人av在线资源网站| 欧美视频在线一区| 久久免费精品国产久精品久久久久| 国产欧美视频在线观看| 亚洲精品精品亚洲| 日本女人一区二区三区| 国产精品一区二区久激情瑜伽| 91一区二区在线| 欧美日韩精品综合在线| 久久久.com| 亚洲超碰精品一区二区| 国产一区二区看久久| 久久精品一区蜜桃臀影院| 亚洲色图丝袜美腿| 日日夜夜一区二区| 成人黄色a**站在线观看| 欧美日韩小视频| 久久久久亚洲蜜桃| 亚洲国产日韩a在线播放性色| 国产一区二区视频在线播放| 97成人超碰视| 337p粉嫩大胆色噜噜噜噜亚洲| 综合久久给合久久狠狠狠97色 | 91麻豆精品国产91久久久使用方法 | 欧美三级电影网| 国产精品情趣视频| 免费高清视频精品| 色呦呦国产精品| 久久久久国色av免费看影院| 亚洲高清免费视频| 北条麻妃一区二区三区| 欧美一级夜夜爽| 亚洲美女在线一区| 国产麻豆91精品| 欧美卡1卡2卡| 国产精品一二三区| 欧美三级中文字幕| 国产精品色在线| 久久99热这里只有精品| 欧美日韩国产成人在线免费| 国产视频911| 日韩精品电影在线观看| 色偷偷久久一区二区三区| 中文字幕的久久| 国产中文字幕精品| 日韩精品在线一区| 日韩精品1区2区3区| 91麻豆福利精品推荐| 国产亚洲精品中文字幕| 日韩avvvv在线播放| 欧美日韩中文一区| 成人欧美一区二区三区1314| 国内精品不卡在线| 精品久久久久久久久久久久久久久 | 国产福利一区二区三区视频在线| 欧美老人xxxx18| 一区二区三区在线视频观看58| 粉嫩高潮美女一区二区三区| 欧美大片一区二区三区| 日日摸夜夜添夜夜添国产精品| 欧美午夜精品一区二区三区| 亚洲精品高清在线观看| a美女胸又www黄视频久久| 国产精品久久久久久久午夜片| 国产在线精品一区二区 | 国产精品卡一卡二| 成人午夜私人影院| 欧美国产视频在线| 国产不卡在线一区| 国产精品私房写真福利视频| 国产999精品久久久久久| 欧美激情一区二区三区蜜桃视频| 国内久久婷婷综合| 国产日韩欧美亚洲| 成人午夜电影网站| 中文字幕一区二区三区不卡| 成人黄色片在线观看| 国产精品麻豆久久久| eeuss鲁片一区二区三区在线看| 国产精品久久三区| 91视视频在线直接观看在线看网页在线看 | 丰满放荡岳乱妇91ww| 亚洲欧洲精品一区二区三区不卡| av电影在线观看一区| 一区二区在线看| 日韩午夜在线播放| 国产精品一区二区果冻传媒| 国产精品高潮久久久久无| 色婷婷亚洲综合| 美腿丝袜在线亚洲一区| 久久伊99综合婷婷久久伊| 99精品一区二区三区| 无码av免费一区二区三区试看| 91精品国产黑色紧身裤美女| 国产一二精品视频| 亚洲色图视频网站| 日韩精品一区二| 91视频在线观看免费| 日韩福利电影在线观看|