DDNS use No-IP

Dependents:   TCPEchoClient-WIZwiki-W7500

Prerequisite

This is DDNS_NoIP Library. DDNS(Dynamic DNS) host name is linked up to the uesr's dynamic IP address. Whenever the IP changes a dynamic DNS client will send an update to No-IP with the current IP address and then No-IP propagates the DNS change to the internet within seconds.


DDNS Configuration

NoIP Site

https://www.noip.com/ /media/uploads/joon874/1.png

/media/uploads/joon874/14.png

Hardware Configuration

WIZwiki-W7500 Pin map

pin map


Software

DDNS

/* Set ID Pass and Hostname */
void userSetNoIP(char* idpass, char* hostname);

/* Upload DDNS IP Address */
void updateNoIP(void);

/* Check DDNS IP Address */
void checkIp(void);


Caution

Committer:
Ricky_Kwon
Date:
Mon Jan 25 05:11:13 2016 +0000
Revision:
1:a5d5ddadd7e7
Parent:
0:807cbe212e24
Wizwiki-W7500 DDNS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ricky_Kwon 0:807cbe212e24 1 #include "mbed.h"
Ricky_Kwon 0:807cbe212e24 2 #include "EthernetInterface.h"
Ricky_Kwon 0:807cbe212e24 3 #include "DDNSClient.h"
Ricky_Kwon 0:807cbe212e24 4 #define DEBUG
Ricky_Kwon 0:807cbe212e24 5 DDNSClient::DDNSClient()
Ricky_Kwon 0:807cbe212e24 6 {
Ricky_Kwon 0:807cbe212e24 7 noip_ddns = "dynupdate.no-ip.com";
Ricky_Kwon 0:807cbe212e24 8 noip_ddns_port = 80;
Ricky_Kwon 1:a5d5ddadd7e7 9
Ricky_Kwon 1:a5d5ddadd7e7 10 check_ip = "checkip.dyndns.com";
Ricky_Kwon 1:a5d5ddadd7e7 11 check_ip_port = 80;
Ricky_Kwon 0:807cbe212e24 12 }
Ricky_Kwon 0:807cbe212e24 13 DDNSClient::~DDNSClient()
Ricky_Kwon 0:807cbe212e24 14 {
Ricky_Kwon 0:807cbe212e24 15
Ricky_Kwon 0:807cbe212e24 16 }
Ricky_Kwon 0:807cbe212e24 17 void DDNSClient::updateNoIP(void)
Ricky_Kwon 0:807cbe212e24 18 {
Ricky_Kwon 0:807cbe212e24 19 char buf[1024]={0,};
Ricky_Kwon 0:807cbe212e24 20
Ricky_Kwon 0:807cbe212e24 21 #ifdef DEBUG
Ricky_Kwon 0:807cbe212e24 22 printf("Updating NoIP...\r\n");
Ricky_Kwon 0:807cbe212e24 23 #endif
Ricky_Kwon 0:807cbe212e24 24 while (DDNSupdate.connect(noip_ddns, noip_ddns_port) < 0) {
Ricky_Kwon 0:807cbe212e24 25 #ifdef DEBUG
Ricky_Kwon 0:807cbe212e24 26 printf("Unable to connect to (%s) on port (%d)\r\n", noip_ddns, noip_ddns_port);
Ricky_Kwon 0:807cbe212e24 27 #endif
Ricky_Kwon 0:807cbe212e24 28 wait(0.5);
Ricky_Kwon 0:807cbe212e24 29 }
Ricky_Kwon 0:807cbe212e24 30 #ifdef DEBUG
Ricky_Kwon 0:807cbe212e24 31 printf("Sended message to server :\r\n");
Ricky_Kwon 0:807cbe212e24 32 #endif
Ricky_Kwon 0:807cbe212e24 33 snprintf(buf, sizeof(buf), "GET /nic/update?hostname=%s&myip=%s HTTP/1.0\r\n", _hostname, _ip);
Ricky_Kwon 1:a5d5ddadd7e7 34 DDNSupdate.send(buf, strlen(buf));
Ricky_Kwon 0:807cbe212e24 35 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 36 printf("%s", buf);
Ricky_Kwon 0:807cbe212e24 37 #endif
Ricky_Kwon 0:807cbe212e24 38
Ricky_Kwon 0:807cbe212e24 39 snprintf(buf, sizeof(buf), "Host: dynupdate.no-ip.com\r\n"); //Write request
Ricky_Kwon 1:a5d5ddadd7e7 40 DDNSupdate.send(buf, strlen(buf));
Ricky_Kwon 0:807cbe212e24 41 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 42 printf("%s", buf);
Ricky_Kwon 0:807cbe212e24 43 #endif
Ricky_Kwon 0:807cbe212e24 44
Ricky_Kwon 0:807cbe212e24 45 snprintf(buf, sizeof(buf), "Authorization: Basic %s\r\n", _idpass); //Write request
Ricky_Kwon 1:a5d5ddadd7e7 46 DDNSupdate.send(buf, strlen(buf));
Ricky_Kwon 0:807cbe212e24 47 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 48 printf("%s", buf);
Ricky_Kwon 0:807cbe212e24 49 #endif
Ricky_Kwon 0:807cbe212e24 50
Ricky_Kwon 0:807cbe212e24 51 snprintf(buf, sizeof(buf), "User-Agent: mbed client/1.0 ricky@wiznet.co.kr\r\n\r\n"); //Write request
Ricky_Kwon 1:a5d5ddadd7e7 52 DDNSupdate.send(buf, strlen(buf));
Ricky_Kwon 0:807cbe212e24 53 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 54 printf("%s", buf);
Ricky_Kwon 0:807cbe212e24 55 #endif
Ricky_Kwon 0:807cbe212e24 56
Ricky_Kwon 0:807cbe212e24 57 #ifdef DEBUG
Ricky_Kwon 0:807cbe212e24 58 printf("Received message from server :\r\n");
Ricky_Kwon 0:807cbe212e24 59 #endif
Ricky_Kwon 0:807cbe212e24 60
Ricky_Kwon 0:807cbe212e24 61 wait(5.0);
Ricky_Kwon 0:807cbe212e24 62 memset(buf, 0, sizeof(buf));
Ricky_Kwon 0:807cbe212e24 63 DDNSupdate.receive_all(buf, sizeof(buf));
Ricky_Kwon 0:807cbe212e24 64 #ifdef DEBUG
Ricky_Kwon 0:807cbe212e24 65 printf("%s", buf);
Ricky_Kwon 0:807cbe212e24 66 #endif
Ricky_Kwon 0:807cbe212e24 67
Ricky_Kwon 1:a5d5ddadd7e7 68 wait(5.0);
Ricky_Kwon 1:a5d5ddadd7e7 69 memset(buf, 0, sizeof(buf));
Ricky_Kwon 1:a5d5ddadd7e7 70 DDNSupdate.receive_all(buf, sizeof(buf));
Ricky_Kwon 1:a5d5ddadd7e7 71 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 72 printf("%s", buf);
Ricky_Kwon 1:a5d5ddadd7e7 73 #endif
Ricky_Kwon 1:a5d5ddadd7e7 74
Ricky_Kwon 0:807cbe212e24 75 DDNSupdate.close();
Ricky_Kwon 0:807cbe212e24 76
Ricky_Kwon 0:807cbe212e24 77 }
Ricky_Kwon 1:a5d5ddadd7e7 78 void DDNSClient::userSetNoIP(char* idpass, char* hostname)
Ricky_Kwon 0:807cbe212e24 79 {
Ricky_Kwon 0:807cbe212e24 80 _hostname = hostname;
Ricky_Kwon 0:807cbe212e24 81 _idpass = idpass;
Ricky_Kwon 0:807cbe212e24 82 }
Ricky_Kwon 1:a5d5ddadd7e7 83 void DDNSClient::checkIp(void)
Ricky_Kwon 1:a5d5ddadd7e7 84 {
Ricky_Kwon 1:a5d5ddadd7e7 85 char buf[1024]={0,};
Ricky_Kwon 1:a5d5ddadd7e7 86 char* tok;
Ricky_Kwon 1:a5d5ddadd7e7 87
Ricky_Kwon 1:a5d5ddadd7e7 88 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 89 printf("Checiking IP...\r\n");
Ricky_Kwon 1:a5d5ddadd7e7 90 #endif
Ricky_Kwon 1:a5d5ddadd7e7 91 while (CheckIp.connect(check_ip, check_ip_port) < 0) {
Ricky_Kwon 1:a5d5ddadd7e7 92 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 93 printf("Unable to connect to (%s) on port (%d)\r\n", check_ip, check_ip_port);
Ricky_Kwon 1:a5d5ddadd7e7 94 #endif
Ricky_Kwon 1:a5d5ddadd7e7 95 wait(0.5);
Ricky_Kwon 1:a5d5ddadd7e7 96 }
Ricky_Kwon 1:a5d5ddadd7e7 97 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 98 printf("Sended message to server :\r\n");
Ricky_Kwon 1:a5d5ddadd7e7 99 #endif
Ricky_Kwon 1:a5d5ddadd7e7 100 snprintf(buf, sizeof(buf), "GET / HTTP/1.0\r\n", _hostname, _ip);
Ricky_Kwon 1:a5d5ddadd7e7 101 CheckIp.send(buf, strlen(buf));
Ricky_Kwon 1:a5d5ddadd7e7 102 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 103 printf("%s", buf);
Ricky_Kwon 1:a5d5ddadd7e7 104 #endif
Ricky_Kwon 1:a5d5ddadd7e7 105 snprintf(buf, sizeof(buf), "Host: checkip.dyndns.com\r\n\r\n");
Ricky_Kwon 1:a5d5ddadd7e7 106 CheckIp.send(buf, strlen(buf));
Ricky_Kwon 1:a5d5ddadd7e7 107 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 108 printf("%s", buf);
Ricky_Kwon 1:a5d5ddadd7e7 109 #endif
Ricky_Kwon 1:a5d5ddadd7e7 110
Ricky_Kwon 1:a5d5ddadd7e7 111 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 112 printf("Received message from server :\r\n");
Ricky_Kwon 1:a5d5ddadd7e7 113 #endif
Ricky_Kwon 1:a5d5ddadd7e7 114
Ricky_Kwon 1:a5d5ddadd7e7 115 wait(3.0);
Ricky_Kwon 1:a5d5ddadd7e7 116 memset(buf, 0, sizeof(buf));
Ricky_Kwon 1:a5d5ddadd7e7 117 CheckIp.receive_all(buf, sizeof(buf));
Ricky_Kwon 1:a5d5ddadd7e7 118 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 119 printf("%s", buf);
Ricky_Kwon 1:a5d5ddadd7e7 120 #endif
Ricky_Kwon 1:a5d5ddadd7e7 121
Ricky_Kwon 1:a5d5ddadd7e7 122 tok = strstr(buf, "Address: ");
Ricky_Kwon 1:a5d5ddadd7e7 123 tok = strtok(tok+9, "<");
Ricky_Kwon 1:a5d5ddadd7e7 124 _ip = tok;
Ricky_Kwon 1:a5d5ddadd7e7 125
Ricky_Kwon 1:a5d5ddadd7e7 126 #ifdef DEBUG
Ricky_Kwon 1:a5d5ddadd7e7 127 printf("IP:%s", tok);
Ricky_Kwon 1:a5d5ddadd7e7 128 #endif
Ricky_Kwon 1:a5d5ddadd7e7 129 CheckIp.close();
Ricky_Kwon 1:a5d5ddadd7e7 130 }