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
Hardware Configuration
WIZwiki-W7500 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
DDNSClient.cpp@1:a5d5ddadd7e7, 2016-01-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |