Go Down

Topic: Webserver with dyn DNS (Read 1 time) previous topic - next topic

karlok

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
using Arduino Uno Rev 3

PaulS

Quote
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.


karlok

#2
Feb 02, 2013, 04:51 pm Last Edit: Feb 02, 2013, 05:01 pm by karlok Reason: 1
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 http://www.noip.com/integrate/request

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 (?)
using Arduino Uno Rev 3

PaulS

Quote
Can the Ethernet be Client and Server on the same time?

Yes.

Quote
Will I first have to stop the server then start the client then do the update, then stop the client and restart the server (?)

No.

karlok

Ok, thanks.

Now I am trying to use the API described here http://www.noip.com/integrate/request

Code: [Select]
// 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.
using Arduino Uno Rev 3

PaulS

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?


karlok

After having done more debugging, I realized I cannot even connect to dynupdate.no-ip.com

I use this to check:
Quote

  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:
Code: [Select]
// 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.

using Arduino Uno Rev 3

PaulS

Can you connect to other servers?

karlok

#8
Feb 02, 2013, 05:59 pm Last Edit: Feb 02, 2013, 06:05 pm by karlok Reason: 1
Yes, and I tried using http prefix
Code: [Select]
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 ...
Connected.

Disconnecting.

using Arduino Uno Rev 3

karlok

#9
Feb 02, 2013, 06:43 pm Last Edit: Feb 02, 2013, 06:55 pm by karlok Reason: 1
The prefix http:// should be omitted.

And I found on this forums, the issue has been already discussed and here is the solution
http://arduino.cc/forum/index.php/topic,95456.msg720162.html#msg720162

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.
using Arduino Uno Rev 3

zoomkat

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.
Consider the daffodil. And while you're doing that, I'll be over here, looking through your stuff.   8)

karlok

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 <ipaddr>"
using Arduino Uno Rev 3

karlok

I also implemented parsing the result, i.e. getting the Date and the Message:

Quote

    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.");

using Arduino Uno Rev 3

Go Up