INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Dynamische DNS / IP Adresse im WAN
03.11.2015, 23:42
Beitrag #9
RE: Dynamische DNS / IP Adresse im WAN
Ausgehend von diesem Beispielcode läuft das jetzt mit der Ermittling der WAN-IP auf dem Arduino.

Wer das Programm nutzen will muss noch die MAC-Adresse seines Ethernetshields ergänzen. Wer keinen lokalen DHCP-Server hat, muss auch ip, dnsServer, gateway und subnet anpassen.
Die Variable:
Code:
IPAddress wan      (   0,   0,   0,  0 );
bitte unverändert lassen. Hier wird bei Erfolg die WAN-IP abgelegt.

Code:
/*
  https://www.arduino.cc/en/Tutorial/WebClient
  Web client

This sketch connects to a website (checkip.dyndns.com)
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe, based on work by Adrian McEwen

*/

#include <SPI.h>
#include <Ethernet.h>

char antwort[270];
int i = 0;

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0xXX, 0xXX, 0xXX };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:

char server[] = "checkip.dyndns.com";    // name address for checkip.dyndns.com (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip       ( 192, 168,   0, 61 );
IPAddress dnsServer( 192, 168,   0, 16 );    
IPAddress gateway  ( 192, 168,   0, 16 );
IPAddress subnet   ( 255, 255, 255,  0 );
IPAddress wan      (   0,   0,   0,  0 );

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip, dnsServer, gateway, subnet);    
  }

  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
//    Serial.print(c);
    antwort[i] = c; i++;
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

char* s = strstr(antwort, "IP Address:");
if( s > 0) {
  wan[0] = (atoi(s+11));  wan[1] = (atoi(s+15));
  wan[2] = (atoi(s+19));  wan[3] = (atoi(s+23));
  Serial.print(F("wan IP:    ")); Serial.println(wan);
}  
else {
  Serial.println("Keine oder ungueltige WAN IP erhalten");
}

Serial.print(F("lokale IP: ")); Serial.println(Ethernet.localIP());
Serial.print(F("dnsServer: ")); Serial.println(Ethernet.dnsServerIP());
Serial.print(F("gateway:   ")); Serial.println(Ethernet.gatewayIP());  
Serial.print(F("subnet:    ")); Serial.println(Ethernet.subnetMask());

    // do nothing forevermore:
    while (true);
  }
}

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 12:47
Beitrag #10
RE: Dynamische DNS / IP Adresse im WAN
Hey, das funktioniert ja super! Da haste aber Gehrinschmalz verbraten, Respekt!Smile

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 14:26
Beitrag #11
RE: Dynamische DNS / IP Adresse im WAN
Schön, wenn es auch bei dir funktioniert. Smile

Was mir noch nicht gefällt ist der 270 Byte große Eingangspuffer, ( char antwort[270]; ), in dem derzeit noch der gesamte Empfang abgelegt wird.
Wenn jemand Lust und Laune hat, kann er sich mal daran versuchen den ganzen HTML-Overhead herauszufiltern bevor der in das Array geschrieben wird.
Sichtbar wird der wieder wenn man in der Zeile ( // Serial.print( c ); ) die Kommentarzeichen entfernt.

VG
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.11.2015, 16:53
Beitrag #12
RE: Dynamische DNS / IP Adresse im WAN
Naja est ist zwar viel Speicher aber mich stört es nicht wirklich, außerdem übersteigt das meine KompetenzenUndecided
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 453 22.08.2016 08:07
Letzter Beitrag: b3ta
  MAC-Adresse aus Formular marco92 2 867 25.12.2014 17:44
Letzter Beitrag: marco92

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste