system
February 2, 2013, 2:53pm
1
Hello,
to reach my Arduino webserver in the www without knowing my IP address, I used a dyndns service (no-ip in my case) and I know that my ISP will assign my a new IP regularly when I switch off and then on my router again (reset) because then I reconnect.
My question is: Does my ISP also assign me a new IP if I always let my router on?
Then I would not need to update my IP with the so called DUC (dynamic update client) tool.
Thank you
system
February 2, 2013, 3:04pm
2
Does my ISP also assign me a new IP if I always let my router on?
Wouldn't this be better answered by your ISP?
Generally, though, the answer is yes. I never turn my router off, and it gets a new IP address about once a week.
system
February 2, 2013, 3:51pm
3
Ok, thank you.
I will monitor the behaviour as from now.
Maybe I have some chanches making the arduino ethernet (as a client ) doing the request to update the new ip.
If someone is interested in this, too, there is an API Integrate with No-IP DDNS - API Information
Can the Ethernet be Client and Server on the same time?
Will I first have to stop the server then start the client then do the update, then stop the client and restart the server (?)
system
February 2, 2013, 4:34pm
5
Ok, thanks.
Now I am trying to use the API described here Integrate with No-IP DDNS - API Information
// NO-IP, Dynamic Update Client, 02.FEB.13
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "dynupdate.no-ip.com";
EthernetClient client;
void setup()
{
Serial.begin(9600);
Serial.println("[NOIP-DUC]\n");
Serial.println("Getting IP address from DHCP ...");
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP !");
while (1)
;
}
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
Serial.println();
Serial.print("Connecting to ");
Serial.print(server);
Serial.println(" ...");
client.connect(server, 80);
// checking for answer?
Serial.println("OK. Sending request...\n");
client.println("GET /nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4 HTTP/1.0");
client.println("Host: dynupdate.no-ip.com");
client.println("Authorization: Basic base64-encoded-auth-string");
client.println("User-Agent: Bobs Update Client WindowsXP/1.2 bob@somedomain.com");
Serial.println("ready?!");
}
void loop()
{
if (client.available())
{
char c = client.read();
Serial.print(c);
}
if (Serial.available())
{
char c = Serial.read();
client.print(c);
}
if (!client.connected())
{
Serial.println();
Serial.println("Disconnecting.");
client.stop();
while (1);
}
}
Why don't I get any answer? It just disconnects after ~5 seconds.
system
February 2, 2013, 4:43pm
6
You need to show all your serial output.
Your domain isn't mytest.testdomain.com , is it?
Your current IP isn't 1.2.3.4, is it?
Your Base64 encoded authorization string isn't base64-encoded-auth-string, is it?
system
February 2, 2013, 4:50pm
7
After having done more debugging, I realized I cannot even connect to dynupdate.no-ip.com
I use this to check:
if (client.connect(server, 80))
{
Serial .println("Connected.");
while (client.connected())
{
while (client.available())
{
char c = client.read();
Serial .print(c);
}
}
client.stop();
}
else
Serial .println("Error connecting!");
My code:
// NO-IP, Dynamic Update Client, 02.FEB.13
#include <SPI.h>
#include <Ethernet.h>
byte mac[] =
{
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
char server[] = "dynupdate.no-ip.com";
EthernetClient client;
void setup()
{
Serial.begin(9600);
Serial.println("[NOIP-DUC]\n");
Serial.println("Getting IP address from DHCP ...");
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP !");
while (1)
;
}
//Give some time to initialize:
delay(2000);
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
Serial.println();
Serial.print("Connecting to ");
Serial.print(server);
Serial.println(" ...");
if (client.connect(server, 80))
{
Serial.println("Connected.");
while (client.connected())
{
while (client.available())
{
char c = client.read();
Serial.print(c);
}
}
client.stop();
}
else
Serial.println("Error connecting!");
}
void loop()
{
if (client.available()) // this cannot be reached by now
{
char c = client.read();
Serial.print(c);
}
if (Serial.available())
{
char c = Serial.read();
client.print(c);
}
if (!client.connected())
{
Serial.println();
Serial.println("Disconnecting.");
client.stop();
while (1)
;
}
}
Serial output
[NOIP-DUC]
Getting IP address from DHCP ...
My IP address: 192.168.2.124
Connecting to dynupdate.no-ip.com ...
Error connecting!
Disconnecting.
system
February 2, 2013, 4:51pm
8
Can you connect to other servers?
system
February 2, 2013, 4:59pm
9
Yes, and I tried using http prefix
char server[] = "http://dynupdate.no-ip.com";
and then the output is
[NOIP-DUC]
Getting IP address from DHCP ...
My IP address: 192.168.2.124
Connecting to http://dynupdate.no-ip.com ...
[b]Connected.[/b]
Disconnecting.
system
February 2, 2013, 5:43pm
10
The prefix http:// should be omitted.
And I found on this forums, the issue has been already discussed and here is the solution
My problem was that I did not always use the same MAC address so that my router had too many ones to save and it is restricted to grant internet access to only the first 5 ones connected or kind of similiar, so I had to flush this and it worked again.
zoomkat
February 2, 2013, 6:46pm
11
Make sure you use your no-ip email address as the no-ip username and the domain you are using (yourhost.no-ip.org is in the example, but my account is .com instead of .org). I tested the code in the posted link with my changes and got the expected response for my no-ip account.
system
February 2, 2013, 7:05pm
12
Now it works!
( my account was .org )
Both using my email address and my user name worked (as the no-ip username)
The answer is "nochg "
system
February 2, 2013, 7:50pm
13
I also implemented parsing the result, i.e. getting the Date and the Message:
String buf = "";
String msg = "";
boolean tak = false;
while (client.connected())
{
while (client.available())
{
char c = client.read();
//Serial.print (c); // verbose?
buf += c;
if (tak)
msg = buf;
if (c == 10)
{
buf.trim();
if (buf.indexOf("Date:") == 0)
Serial .println("DATE = " + buf);
if (buf == "") //empty line -> message
tak = true;
buf = "";
}
}
}
client.stop();
msg.trim();
Serial .println("MESSAGE = " + msg);
Serial .println("Disconnecting.");