搜索
bottom↓
回复: 5

【EtherNut】推荐一个免费DDNS服务器,以及在ethernut上使用的简单例子。

[复制链接]

出0入0汤圆

发表于 2011-10-8 21:03:27 | 显示全部楼层 |阅读模式
虽说有些路由器菜单里支持DDNS,但很多都不能用。
最气人的是新弄到DLINK路由器,注_册了个帐号,居然几天之后才给回复了个激活邮件,TNND,早就过了48小时了。
免费的DDNS很多,不过有些用起来比较麻烦。

试验了几个,发现 www.myfreeip.me 不错。

myfreeip同样提供了一个客户端,不过IP地址的更新仍然使用的是www服务,Base Auth。

下面这个例子只是最初试验用的东西,没有使用 NutEncodeBase64 函数,直接用抓取封包分析之后得到的编码。

NutThreadCreate("t1", ddns_client, 0, 201);

THREAD(ddns_client, arg)
{
    unsigned int t;
    char ddns_server_str[]="173.225.1.91";
    char ddns_request1[] = "GET /client/update.aspx?host=test.myfreeip.info HTTP/1.1\r\nUser-Agent: DDNS-Enterprise-Client-v2.0\r\nHost: www.myfreeip.me\r\n\r\n";
    char ddns_request2[] = "GET /client/update.aspx?host=test.myfreeip.info HTTP/1.1\r\nUser-Agent: DDNS-Enterprise-Client-v2.0\r\nAuthorization: Basic aHDGSXVsaWFuZ0BDFAFpbC5jb308aHlsODAzMQ==\r\nHost: www.myfreeip.me\r\n\r\n";

    TCPSOCKET * sock;
    NutThreadSetPriority(150);

    for(;;){
        if ((sock = NutTcpCreateSocket()) != 0) {
            if (NutTcpConnect(sock, inet_addr(ddns_server_str), 80) == 0)
            {
            #ifdef DEBUG
                puts("DDNS Server connected!");
            #endif
                NutTcpSend(sock, ddns_request1, strlen(ddns_request1));
                NutDelay(100);
                NutTcpSend(sock, ddns_request2, strlen(ddns_request2));
                NutTcpCloseSocket(sock);
            #ifdef DEBUG
                puts("DDNS Server disconnected!");
            #endif
            }else{
                puts("Can't connect DDNS server");
            }
            NutTcpCloseSocket(sock_2);            
        }
        else
            puts("Can't create tcp socket, maybe cause by no enough memory left.");
            
        for(t=1;t<=100;t++)
            NutSleep(1000);  // 1000 ms   
    }
}

额外说明下,这并不是完整的代码,里面的域名和base64编码后的密码也都是虚构的,而且也缺少对服务器应答的解析。

基本验证需要两个过程,客户端发起请求-->服务器应答(要求验证)-->客户端再次发起请求(发送帐号密码)。
这里host=test.myfreeip.info中的域名即为帐号,Authorization: Basic aHDGSXVsaWFuZ0BDFAFpbC5jb308aHlsODAzMQ==
比较乱的字符就是经base64编码后的密码了。

这是抓包后得到的一个例子。注意其中的回车换行。
点击此处下载 ourdev_683146H6IAMQ.txt(文件大小:857字节) (原文件名:exam.txt)


基本上可以说,在嵌入式设备式设备上实现DDNS客户端,可以解决家庭用户的域名问题,尤其是在使用了不具有DDNS功能的路由器的时候。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出10入0汤圆

发表于 2011-10-8 22:42:21 | 显示全部楼层
顶 哦 ,

出0入0汤圆

发表于 2011-10-9 16:45:12 | 显示全部楼层
mark

出0入663汤圆

发表于 2011-10-9 17:35:46 | 显示全部楼层
一直在用3322,也是一条HTTP请求完事,路由器的支持也很广泛。

出0入0汤圆

 楼主| 发表于 2011-10-9 17:46:15 | 显示全部楼层
回复【3楼】gzhuli  咕唧霖
一直在用3322,也是一条http请求完事,路由器的支持也很广泛。
-----------------------------------------------------------------------

手里的MR804,DIR-605、W311R,都不行。。。

话说在试验那个程序的时候,还被 myfreeip 封了个域名,估计是因为俺在试验的时候发送的请求不完整(开始没注意结尾的两个\r\n)。

3322的俺很喜欢用,可帐号不记得了。。。。曾经为 coyote 写过一个 3322 的DDNS插件。

出0入0汤圆

发表于 2013-12-3 19:35:00 | 显示全部楼层
顶顶更健康
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表