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

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

?? dns_client.c

?? uCOS-II下實現的lwip協議棧實現Ping功能
?? C
字號:
//*------------------------------------------------------------------------------------------------
//* 文件名				: dns_clinet.c
//* 功能描述			: dns客戶端
//* 作者    			: 焦海波
//* 版本				: 0.1
//* 建立日期、時間		: 2006/08/10 15:23
//* 最近修改日期、時間	: 
//* 修改原因			: 
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 頭文件 -----------------------------------------------
#include    "/uCOS_II/includes.h"
#include	"/LwIP/include/lwip/tcpip.h"
#include	"dns_client.h"
//*================================================================================================
//*                     函 數 區
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : ulDNToIP
//* 功能描述 : 查詢DNS服務器,將指定的域名轉換為IP地址
//*          :     <pszDN>[in] 指向域名的指針
//*          :    <lDNLen>[in] 域名長度
//*          :   <pstPbuf>[in] 指向st_pbuf結構的指針,它這個結構保存要發送的DNS的查詢包
//* 出口參數 : 無
//*------------------------------------------------------------------------------------------------
__inline void __ilvPacketDNSQuest(BYTE *pszDN, LONG lDNLen, st_pbuf *pstPbuf)
{
	ST_DNS_PACKET_HDR	*__pstDNSPacket;
	BST_ID_AND_FLAGS	*__pbstIDAndFlags;
	
	__pstDNSPacket = (ST_DNS_PACKET_HDR*)pstPbuf->payload;
	__pstDNSPacket->ulIDAndFlags = 0x00000000;
	__pbstIDAndFlags = &__pstDNSPacket->ulIDAndFlags;
	__pbstIDAndFlags->bitID = 0x0608;
	__pbstIDAndFlags->bitIsRD = 0x1;
	__pstDNSPacket->uwQCount = 0x0100;
	__pstDNSPacket->uwACount = 0x0000;
	__pstDNSPacket->uwAuthCount = 0x0000;
	__pstDNSPacket->uwARC = 0x0000;
	memcpy((UBYTE*)pstPbuf->payload + DNS_PACKET_HDR_LEN, pszDN, lDNLen);
	*((UBYTE*)pstPbuf->payload + DNS_PACKET_HDR_LEN + lDNLen) = 0x00;
	*((UBYTE*)pstPbuf->payload + DNS_PACKET_HDR_LEN + lDNLen + 1) = DNS_PACKET_QUERY_TYPE;
	*((UBYTE*)pstPbuf->payload + DNS_PACKET_HDR_LEN + lDNLen + 2) = 0x00;
	*((UBYTE*)pstPbuf->payload + DNS_PACKET_HDR_LEN + lDNLen + 3) = DNS_PACKET_QUERY_CLASS;
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __ilulParseRespDNSPacket
//* 功能描述 : 解析DNS服務器響應的數據包
//* 入口參數 : <pstPbuf>[in] 指向ST_NETBUF的指針
//*          :   <pulIP>[in] 指向接收緩沖區(保存IP地址)的指針
//*          :  <lDNlen>[in] 要查詢域名的長度
//* 出口參數 : - DNS_OK	       : 查詢成功
//*          : - DNS_NOT_EXIST : 指定的域名不存在
//*          : - DNS_OTHER     : 未知錯誤
//*------------------------------------------------------------------------------------------------
__inline ULONG __ilulParseRespDNSPacket(st_pbuf *pstPbuf, ULONG *pulIP, LONG lDNLen)
{
	ST_DNS_PACKET_HDR	*__pstDNSPacket;
	ULONG				__ulVal;
	BST_ID_AND_FLAGS	*__pbstIDAndFlags;
	void 				*__pvData;
	UWORD				__uwACount, __uwAnswerDataLen, __uwOffset;
	
	__pstDNSPacket = (ST_DNS_PACKET_HDR	*)pstPbuf->payload;
	__ulVal = __pstDNSPacket->ulIDAndFlags;
	__pbstIDAndFlags = &__ulVal;
	
	if(__pbstIDAndFlags->bitOptResult == 0)
	{
		__uwACount = macHighToLowForWord(__pstDNSPacket->uwACount);
		__uwOffset = lDNLen + 14;
		while(__uwACount > 0)
		{
			__pvData = (UBYTE*)pstPbuf->payload + DNS_PACKET_HDR_LEN + __uwOffset;
			__uwAnswerDataLen = macHighToLowForWord(*((__packed UWORD*)__pvData));
			
			if((__uwAnswerDataLen == 4) && macHighToLowForWord(*((__packed UWORD*)((UBYTE*)__pvData - 8))) == DNS_PACKET_QUERY_TYPE)
			{
				*pulIP = *((__packed ULONG *)((UBYTE*)__pvData + 2));				
				
				return DNS_OK;
			}
			
			__uwOffset += 12 + __uwAnswerDataLen;
			
			__uwACount--;
		}
		
		return DNS_OTHER;
	}
	else if(__pbstIDAndFlags->bitOptResult == 3)
	{
		return  DNS_NOT_EXIST;
	}
	
	return DNS_OTHER;
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __vDNSRecv
//* 功能描述 : 接收并解析DNS服務器響應的數據包,它是一個回調函數,由udp_recv()設置
//* 入口參數 :    <pstArg>[in] 指向ST_RECV_FUN_ARG結構的指針,這個結構保存著該函數需要的入口參數
//*          : <pstUDPPCB>[in] 指向ST_UDP_PCB結構的指針
//*          :   <pstPbuf>[in] 指向st_pbuf結構的指針,它保存著收到的內容
//*          :     <pstIP>[in] IP地址
//*          :    <uwPort>[in] 端口號
//* 出口參數 : - DNS_OK	       : 查詢成功
//*          : - DNS_NOT_EXIST : 指定的域名不存在
//*          : - DNS_OTHER     : 未知錯誤
//*------------------------------------------------------------------------------------------------
static void __vDNSRecv(ST_RECV_FUN_ARG *pstArg, ST_UDP_PCB *pstUDPPCB, 
						st_pbuf *pstPbuf, st_ip_addr *pstIP, UWORD uwPort)
{
	if(pstPbuf != NULL)
	{
		pstArg->ulRtnCode = __ilulParseRespDNSPacket(pstPbuf, pstArg->pulIP, pstArg->lDNLen);
	
		pbuf_free(pstPbuf);
	}
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : __ulGetIP
//* 功能描述 : 查詢DNS服務器,獲取指定域名綁定的IP地址,這里只能使用協議棧直接接口實現,使用其提供
//*          : 的API無法滿足需求。如果接收DNS響應包使用netconn_recv函數非常容易阻塞系統,因為UDP
//*          : 不可靠。
//*          : <pstPbuf>[in] 指向st_pbuf結構的指針,它這個結構保存要發送的DNS的查詢包
//*          :   <pulIP>[in] 指向接收緩沖區(保存IP地址)的指針
//*          :  <lDNLen>[in] 要查詢的域名長度
//*          : <ulDNSIP>[in] DNS服務器的IP地址
//* 出口參數 : - DNS_OK	       : 查詢成功
//*          : - DNS_NOT_EXIST : 指定的域名不存在
//*          : - DNS_NOT_CONN  : 無法連接指定的域名服務器(主、備服務器均不可用)
//*          : - DNS_OTHER     : 未知錯誤
//*------------------------------------------------------------------------------------------------
ULONG __ulGetIP(st_pbuf *pstPbuf, ULONG *pulIP, LONG lDNLen, ULONG ulDNSIP)
{
	st_ip_addr 			__stIPAddr;
	ST_UDP_PCB			*__pstUDPPCB;
	ST_RECV_FUN_ARG		__stRecvArg;
	LONG				i, k = 0;
	ULONG				__ulRtnCode;
	
	__pstUDPPCB = udp_new();
	if(__pstUDPPCB == NULL)
		return DNS_OTHER;
	
	__stIPAddr.addr = htonl(ulDNSIP);
	if(udp_connect(__pstUDPPCB, &__stIPAddr, DNS_PORT) != ERR_OK)
		return DNS_OTHER;
		
	memset(&__stRecvArg, 0, sizeof(ST_RECV_FUN_ARG));
	__stRecvArg.ulRtnCode = -1;
	__stRecvArg.pulIP = pulIP;
	__stRecvArg.lDNLen = lDNLen;
	
	udp_recv(__pstUDPPCB, __vDNSRecv, &__stRecvArg);
	
	//* 發送和接收
	while(k<15)
	{
		udp_send(__pstUDPPCB, pstPbuf);		

		i = 0;	
		while(i < 30)
		{
			__ulRtnCode = __stRecvArg.ulRtnCode;
			
			if(__ulRtnCode != -1)
				goto __lbEnd;
			
			OSTimeDlyHMSM(0, 0, 0, 100);
			i++;
		}
		
		k++;
	}				
	
__lbEnd:
	//* 收尾工作,回收占用的資源
	udp_disconnect(__pstUDPPCB);
	udp_remove(__pstUDPPCB);
	
	if(__ulRtnCode != -1)
		return __stRecvArg.ulRtnCode;
	else
		return DNS_NOT_CONN;
}
//*------------------------------------------------------------------------------------------------
//* 函數名稱 : ulDNToIP
//* 功能描述 : 查詢DNS服務器,將指定的域名轉換為IP地址
//* 入口參數 :  <pszDN>[in] 指向域名的指針
//*          : <lDNLen>[in] 域名長度
//*          :  <pulIP>[in] 指向接收緩沖區(保存IP地址)的指針
//* 出口參數 : - DNS_OK	       : 查詢成功
//*          : - DNS_NOT_EXIST : 指定的域名不存在
//*          : - DNS_NOT_CONN  : 無法連接指定的域名服務器(主、備服務器均不可用)
//*          : - DNS_OTHER     : 未知錯誤
//*------------------------------------------------------------------------------------------------
ULONG ulDNToIP(BYTE *pszDN, LONG lDNLen, ULONG *pulIP)
{
	st_pbuf         	*__pstPbuf = NULL;
	LONG				__lTotLen;
	ULONG				__ulRtnCode;

	__lTotLen = DNS_PACKET_HDR_LEN + lDNLen + 4;
	__pstPbuf = pbuf_alloc(PBUF_RAW, __lTotLen, PBUF_POOL);
	if(__pstPbuf == NULL)
		return DNS_OTHER;
		
	__ilvPacketDNSQuest(pszDN, lDNLen, __pstPbuf);

	__ulRtnCode = __ulGetIP(__pstPbuf, pulIP, lDNLen, DNS1_IP_ADDR);
	if(__ulRtnCode == DNS_NOT_CONN)
		__ulRtnCode = __ulGetIP(__pstPbuf, pulIP, lDNLen, DNS2_IP_ADDR);
	
	pbuf_free(__pstPbuf);
		
	return __ulRtnCode;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人毛片在线观看| 亚洲第一福利一区| 国产精品萝li| 亚洲欧美区自拍先锋| 一区二区视频在线看| 日韩av二区在线播放| 风间由美中文字幕在线看视频国产欧美| 粉嫩av一区二区三区粉嫩 | 亚洲亚洲精品在线观看| 日韩电影一区二区三区| 高清在线观看日韩| 欧美午夜精品免费| 久久久久久电影| 亚洲一级不卡视频| 开心九九激情九九欧美日韩精美视频电影 | 中文字幕精品一区| 人禽交欧美网站| 色综合天天狠狠| 欧美草草影院在线视频| 亚洲美女精品一区| 国产成人亚洲精品青草天美| 欧美一区二区高清| 亚洲黄一区二区三区| 国产成人精品一区二区三区四区| 欧美特级限制片免费在线观看| 久久中文娱乐网| 免费高清在线一区| 在线观看视频一区二区欧美日韩 | 裸体一区二区三区| 欧美日韩三级在线| 一区二区三区中文字幕电影| 91香蕉视频在线| 国产精品乱码一区二区三区软件| 激情文学综合网| 久久人人97超碰com| 精品亚洲成a人在线观看| 欧美性极品少妇| 激情图片小说一区| 国产黄色精品网站| 欧美一区二区三区日韩视频| 亚洲一区av在线| 欧美日韩一卡二卡三卡 | 成人av电影在线观看| 亚洲天堂久久久久久久| 日本高清不卡一区| 午夜精品久久久久久久| 日韩手机在线导航| 国产成人在线看| 亚洲三级在线免费观看| 在线观看国产精品网站| 日产国产高清一区二区三区| 成人综合婷婷国产精品久久蜜臀| 日韩视频免费观看高清在线视频| 狠狠狠色丁香婷婷综合久久五月| 国产亚洲一区二区三区在线观看 | 在线观看91视频| 久久99日本精品| 一区二区三区在线看| 日韩精品一区国产麻豆| 色欧美片视频在线观看在线视频| 日本欧美在线看| 亚洲色图另类专区| 一区二区三区四区精品在线视频| 色综合久久中文综合久久牛| 亚洲综合一二三区| 亚洲综合色区另类av| 久久影院视频免费| 欧美日韩小视频| 国产一区高清在线| 久久久天堂av| 国产成人99久久亚洲综合精品| 亚洲福利一二三区| 一区二区欧美视频| 中文字幕欧美一区| 久久久久国产精品人| 欧美r级电影在线观看| 欧美三级视频在线观看| 在线观看亚洲专区| 国产精品影视网| 国产精品888| 成人一区二区在线观看| a亚洲天堂av| 国产美女视频91| 成人av电影在线网| 91在线看国产| 色狠狠一区二区三区香蕉| 97精品国产97久久久久久久久久久久| 国产美女视频一区| 99视频精品免费视频| 成av人片一区二区| 99国产欧美久久久精品| 在线观看一区二区精品视频| 欧美人妖巨大在线| 91精品国产欧美一区二区| 久久久久久久久久久久久女国产乱| 久久嫩草精品久久久精品| 国产欧美va欧美不卡在线| 欧美理论片在线| 日本韩国视频一区二区| 91精品婷婷国产综合久久| 精品少妇一区二区| 国产精品第13页| 蜜臀av性久久久久av蜜臀妖精 | 成人一级视频在线观看| 91丨porny丨最新| 日韩一级二级三级| 亚洲伦在线观看| 精品一区二区精品| 色综合久久久久网| 久久久久久久久岛国免费| 日韩黄色在线观看| 在线免费观看一区| 亚洲午夜激情av| 韩国v欧美v亚洲v日本v| 色婷婷亚洲综合| 精品国产青草久久久久福利| 亚洲一区二区综合| 99在线精品免费| 国产精品久久久久久久裸模| 麻豆精品视频在线观看| 欧美亚洲日本国产| 亚洲一区二区在线播放相泽| 色综合久久久网| 亚洲欧美一区二区三区久本道91| 国产精品伊人色| 中文字幕永久在线不卡| 成人动漫一区二区在线| 成人欧美一区二区三区1314| 国产成人在线观看免费网站| 国产亚洲人成网站| 成人免费视频app| 国产日本欧美一区二区| 成人国产精品免费观看视频| 中文字幕中文字幕一区二区| 欧美专区在线观看一区| 首页亚洲欧美制服丝腿| 日韩久久久精品| 成人免费三级在线| 亚洲成人自拍一区| 久久久综合视频| 91在线无精精品入口| 日韩精品福利网| 亚洲欧美日韩在线| 欧美日韩激情一区二区| 亚洲综合一二区| 欧美日本在线观看| 国产成人综合视频| 亚洲一区二区视频在线| 日韩精品在线一区| 91色九色蝌蚪| 国产精品一区二区在线播放 | 日韩在线一区二区| 中文字幕 久热精品 视频在线| 激情文学综合插| 在线观看视频一区二区欧美日韩| 中文字幕 久热精品 视频在线| 欧美日韩国产一二三| 欧美丝袜丝交足nylons| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲美女淫视频| 久久精品夜夜夜夜久久| 自拍偷在线精品自拍偷无码专区| 在线欧美日韩精品| 99久久久国产精品| 国产成人亚洲综合色影视| 亚洲网友自拍偷拍| 亚洲一二三四区| 精品一区二区影视| 成人精品国产一区二区4080| 在线观看视频一区二区| 欧美xxxxx裸体时装秀| 国产丝袜美腿一区二区三区| 亚洲影院在线观看| 亚洲丶国产丶欧美一区二区三区| 亚洲成人精品影院| 日韩成人免费在线| 精品一二线国产| 国产a级毛片一区| 一区二区三区美女| 亚洲美女一区二区三区| 婷婷中文字幕一区三区| 国产在线国偷精品免费看| 成人午夜电影网站| 欧美日本一道本| 国产精品色在线| 日本成人在线视频网站| 精品一区二区国语对白| 一本色道综合亚洲| 日韩欧美色电影| 欧美国产乱子伦| 久久精品国产精品亚洲精品| 色拍拍在线精品视频8848| 精品卡一卡二卡三卡四在线| 一区二区三区成人| 狠狠v欧美v日韩v亚洲ⅴ| 91成人网在线| 国产精品沙发午睡系列990531| 男女男精品网站| 在线一区二区三区| 欧美高清你懂得|