您的位置:首页 > 编程语言

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

2017-05-01 12:42 337 查看
为了适合需要,现在设备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,不同的硬件发送方式不用,原理是一样的

“`

/[b]**********************************************************[/b]/

/* 本程序仅供学习参考,未经作者允许,不得用于任何商业用途 */

/* DNS相关 */

/* 本程序用于硬件设备接入fuhome.net 平台进行远程控制(手机APP/微信/WEB */

/* 版本:v2.0 2017年3月17日 */

/* 龙剑奋斗 */

/* 定期更新,敬请关注——开放,交流,深入,进步 */

/* Copyright fuhome.net 未来之家 实验室,让科技融入生活 */

/[b]**********************************************************[/b]/

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};

/[b]*********************************[/b]/

/* 功能:1、发送查询包 */

/* 输入:无 */

/* 输出:无 */

/* 备注: */

/[b]*********************************[/b]/

void DNS_Send_Request(void)

{

memcpy(Tx_Buffer,DNS_Data,32);//将数据复制到缓冲区
Write_SOCK_Data_Buffer(0, Tx_Buffer, 32);//端口0发送UDP数据包


}

www.longjiancn.com 龙剑奋斗博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息