单片机编程实现用网址域名获取服务器IP,超简单,一句话

2019-04-15 19:22发布

为了适合需要,现在设备IP可能变化,以dev.fuhome.net域名所指向的IP为准。(其他域名以后仅作浏览网页使用,原IP暂时有效,有兴趣的可以根据本文内容做到再也不需要固定服务器IP了,很简单的哦,不信你看) DNS,通俗讲就是将域名比如:www.fuhome.net,转换成服务器的IP地址,单片机也能轻松实现哦,很简单 原理:任何可以发送UDP数据包的设备,采用任何本地端口,向DNS服务器的53端口发送UDP DNS请求包即可收到返回。
DNS服务器的IP很多比如谷歌8.8.8.8,中国的114.114.114.114,成白上千,我们的手机,电脑,路由器会有一个DNS服务器IP设置向,默认是自动获取,那意味着变化。不过也可以用已知很出名的DNS服务器IP。
本文我做了一个很取巧的方式,把路由器的网关IP作为DNS服务器IP,因为路由器会主动帮我们发到真正的DNS上面,收到信息也会转发给我们:
下面是我请求的www.fuhome.net的例子(换行是为了让相应字节分开好讲解,收到的数据包是连续的) 1、DNS请求
12 34 01 00 00 01 00 00 00 00 00 00
03 77 77 77 06 66 75 68 6f 6d 65 03 6e 65 74 (就是这个意思:3 www 6 fuhome 3 net)
00 00 01 00 01 2、DNS接收
12 34 81 80 00 01 00 01 00 00 00 00
03 77 77 77 06 66 75 68 6f 6d 65 03 6e 65 74 (就是这个意思:3 www 6 fuhome 3 net)
00 00 01 00 01
c0 0c 00 01 00 01 00 00 01 2c 00 (C0 0C是一个标志,有用信息开始)
04 73 1c 5d c9 (04长度 后面四个就是服务器IP,自己用调试工具发送试试,看看是不是很神奇,有的网站可能还有别的内容,最后一行一般是04 开头的IP) 114.114.114.114作为DNS服务器
这里写图片描述 路由器网关IP:192.168.1.1作为DNS服务器,注意每个人路由器也许设置不一样,那要具体看你路由器的IP了
这里写图片描述 fu_dns.c,不同的硬件发送方式不用,原理是一样的 “`
/**********************************************************/
/* 本程序仅供学习参考,未经作者允许,不得用于任何商业用途 */
/* DNS相关 */
/* 本程序用于硬件设备接入fuhome.net 平台进行远程控制(手机APP/微信/WEB */
/* 版本:v2.0 2017年3月17日 */
/* 龙剑奋斗 */
/* 定期更新,敬请关注——开放,交流,深入,进步 */
/* Copyright fuhome.net 未来之家 实验室,让科技融入生活 */
/**********************************************************/ U8 DNS_Data[32]={0x12 ,0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x77,0x77,0x77,0x06,0x66,0x75,0x68,0x6f,0x6d,0x65,0x03,0x6e,0x65,0x74,0x00,
0x00,0x01,0x00,0x01};
//获取 DNS: dev.fuhome.net U8 DNS_OK=0;
U16 DNS_Time=0;
U8 DNS_Server[4]={0,0,0,0}; /*********************************/
/* 功能:1、发送查询包 */
/* 输入:无 */
/* 输出:无 */
/* 备注: */
/*********************************/ void DNS_Send_Request(void)
{ memcpy(Tx_Buffer,DNS_Data,32);//将数据复制到缓冲区 Write_SOCK_Data_Buffer(0, Tx_Buffer, 32);//端口0发送UDP数据包 } www.longjiancn.com 龙剑奋斗博客