
59494
04.01.2008, aktualisiert am 05.01.2008
Externe IP auslesen und in Datei und Datenbank schreiben
Bin neu und brauche Hilfe ;)
Zuersteinmal hallo. Ich bin neu hier und habe die Seite über eine Suchmaschine gefunden. Zwar habe ich nicht die LÖsung gefunden doch war die Seite das kompenteste was ich gelesen habe. Ich wette, ich bin im falschen Unterforum gelandet, da ich nicht genau angeben kann wozu dieser Beitrag nun gehört.
Vorab einige vielleicht benötigte Angaben
Betriebssystem: Vista Ultimate64 als Admin
Netzwerk: Internet<->Router<->Computer
Kenntnisse: grundlegende Kenntnisse vorhanden, jedoch absolut unterbegabt und selbst mit Einlesung keinerlei Verständnis von Programmierung, tut mir leid. Ich lese und lese und verstehe nur Bahnhof
Auf dem betroffenem PC läuft Xampp (also Apache/SQL usw)
Ich suche ein Programm/Tool/Batch/Dienst (ich weiß nicht mit was es möglich ist), welcher
- automatisch läuft und in jede X Minuten untenstehende Sache ausführt
- Externe aktuelle IP auslesen
- Vergleich mit IP in der Hosts-Datei(C/Windows/System32/Drivers/etc/ ist die drin) und falls diese abweicht, die mit der externen IP ersetzen. Die Hosts-Datei hat nur einen von mir geänderten Eintrag der wie folgt lautet: 127.0.0.1 xx.xx.xx.xx (letzteres ist die externe IP)
- Vergleich mit einem Eintrag aus einer sql-Datenbank und dort die IP abgleicht und bei Bedarf ersetzt)
Letzteres ist mir wichtiger
Wie stelle ich das an. Leider habe ich keinerlei Ahnung. Wichtig ist vor allem das es ständig auf dem Server läuft
Zuersteinmal hallo. Ich bin neu hier und habe die Seite über eine Suchmaschine gefunden. Zwar habe ich nicht die LÖsung gefunden doch war die Seite das kompenteste was ich gelesen habe. Ich wette, ich bin im falschen Unterforum gelandet, da ich nicht genau angeben kann wozu dieser Beitrag nun gehört.
Vorab einige vielleicht benötigte Angaben
Betriebssystem: Vista Ultimate64 als Admin
Netzwerk: Internet<->Router<->Computer
Kenntnisse: grundlegende Kenntnisse vorhanden, jedoch absolut unterbegabt und selbst mit Einlesung keinerlei Verständnis von Programmierung, tut mir leid. Ich lese und lese und verstehe nur Bahnhof
Auf dem betroffenem PC läuft Xampp (also Apache/SQL usw)
Ich suche ein Programm/Tool/Batch/Dienst (ich weiß nicht mit was es möglich ist), welcher
- automatisch läuft und in jede X Minuten untenstehende Sache ausführt
- Externe aktuelle IP auslesen
- Vergleich mit IP in der Hosts-Datei(C/Windows/System32/Drivers/etc/ ist die drin) und falls diese abweicht, die mit der externen IP ersetzen. Die Hosts-Datei hat nur einen von mir geänderten Eintrag der wie folgt lautet: 127.0.0.1 xx.xx.xx.xx (letzteres ist die externe IP)
- Vergleich mit einem Eintrag aus einer sql-Datenbank und dort die IP abgleicht und bei Bedarf ersetzt)
Letzteres ist mir wichtiger
Wie stelle ich das an. Leider habe ich keinerlei Ahnung. Wichtig ist vor allem das es ständig auf dem Server läuft
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 77179
Url: https://administrator.de/forum/externe-ip-auslesen-und-in-datei-und-datenbank-schreiben-77179.html
Ausgedruckt am: 18.04.2025 um 15:04 Uhr
12 Kommentare
Neuester Kommentar
Hi, willkommen. Bin auch erst seit wenigen Minuten hier angemeldet, versuche aber mal mein Glück, dir zu helfen.
Ich würde das über eine Batch-Datei machen, die Automatisch alle x Minuten ausgeführt wird.
Schritt 1: Ermittlung der externen IP-Adresse
Das ist wohl am schwierigsten.
Variante A: Ich würde versuchen über deinen DNS-Provider die IP aktualisiert zu halten. z.B. DynDNS. Funktionsweise:
Bei jedem Anmelden im Internet ändert sich die IP-Adresse (dynamische IP). Der Router meldet sich bei DynDNS und teilt mit, dass er mit einer neuen IP im Netz ist. So wird der DNS-Eintrag aktualisiert. Wie kommst du nun an deine IP? Du setzt eine Namensauflösung ab
Dann hast du schonmal u.a. die externe IP auf dem Bildschirm.
Variante B: Such dir eine Internetseite, die nur deine IP anzeigt und speichere diese dann in einer Datei
Schritt 2: Hosts aktualisieren
In deiner Batchdatei schreibst du:
Schritt 3: Datenbank aktualisieren
Schritt 4: Als Permanenter Job
Systemsteuerung -> Geplanter Task - > Neuer Task
Durchsuchen ... -> Script auswählen -> Täglich ausführen -> Ausführender Benutzer -> Fertig stellen
Task rechts anklicken -> Eigenschaften -> Reiter Zeitplan -> Button Erweitert...
Häkchen bei Task wiederholen -> Alle x Minuten -> OK -> OK
Ich hoffe ich konnte dir helfen.
Ich würde das über eine Batch-Datei machen, die Automatisch alle x Minuten ausgeführt wird.
Schritt 1: Ermittlung der externen IP-Adresse
Das ist wohl am schwierigsten.
Variante A: Ich würde versuchen über deinen DNS-Provider die IP aktualisiert zu halten. z.B. DynDNS. Funktionsweise:
Bei jedem Anmelden im Internet ändert sich die IP-Adresse (dynamische IP). Der Router meldet sich bei DynDNS und teilt mit, dass er mit einer neuen IP im Netz ist. So wird der DNS-Eintrag aktualisiert. Wie kommst du nun an deine IP? Du setzt eine Namensauflösung ab
nslookup //dein_dnydns_name//.dyndns.org
Variante B: Such dir eine Internetseite, die nur deine IP anzeigt und speichere diese dann in einer Datei
Schritt 2: Hosts aktualisieren
In deiner Batchdatei schreibst du:
echo "127.0.0.1 localhost ip_address" > C:/Windows/System32/Drivers/etc/hosts
Schritt 3: Datenbank aktualisieren
\\PFAD-ZU-MYSQL-BIN\\/mysql -e "UPDATE ip_address_table SET ip_address_att = "ip_address" WHERE id = 1"
Schritt 4: Als Permanenter Job
Systemsteuerung -> Geplanter Task - > Neuer Task
Durchsuchen ... -> Script auswählen -> Täglich ausführen -> Ausführender Benutzer -> Fertig stellen
Task rechts anklicken -> Eigenschaften -> Reiter Zeitplan -> Button Erweitert...
Häkchen bei Task wiederholen -> Alle x Minuten -> OK -> OK
Ich hoffe ich konnte dir helfen.
Moin Drullo321,
willkommen im Forum.
Zum Zwischenspeichern der gefundenen IP folgende Zeilen in Deine Batchdatei einbauen:
Eine Batchdatei anlegen: Code in einem Texteditor eintippen, falls gar nichts anderes vorhanden auch im Notepad, "speichern unter" irgendwo, wo Du sie wiederfindest mit dem Namen "DeinKreativerBatchname.cmd" in Anführungszeichen, damit nicht derdoofe Notepad die Endung ".txt" anhängt.
Anmerkung: Wenn Du komplexe Anforderungen hast oder glaubst zu haben, dann...
Insbesondere die Nachfrage "Und wo find ich den Pfad zur mysql-bin." ist ...ähh.. hmmm.... schwer zu beantworten von meiner Tastatur aus.
Grüße
Biber
willkommen im Forum.
Zum Zwischenspeichern der gefundenen IP folgende Zeilen in Deine Batchdatei einbauen:
:: ----HoleIPviaNslookup.cmd
@echo off & setlocal
for /f "tokens=2" %%i in ('nslookup xyz.dyndns.org^|find "Add"') do set "IP=%%i"
....
:: Jetzt steht die IP in der Variablen %IP% und kann in dem SQL.Statement als %IP% eingesetzt werden.
Eine Batchdatei anlegen: Code in einem Texteditor eintippen, falls gar nichts anderes vorhanden auch im Notepad, "speichern unter" irgendwo, wo Du sie wiederfindest mit dem Namen "DeinKreativerBatchname.cmd" in Anführungszeichen, damit nicht der
Anmerkung: Wenn Du komplexe Anforderungen hast oder glaubst zu haben, dann...
- wenn Du gar nichts hast: für formulierbare Teilprobleme jeweils einen Thread. Fragen, Antworten abwarten, als "erledigt" kennzeichnen.
- wenn Du schon einen Ansatz hast: Poste das. ggf mit Pseudo-Code. Sich beim Antworten alles (Namen/Pfade/Variablen etc) neu UND allgemein verständlich auszudenken ist lumpig.
Insbesondere die Nachfrage "Und wo find ich den Pfad zur mysql-bin." ist ...ähh.. hmmm.... schwer zu beantworten von meiner Tastatur aus.
Grüße
Biber
Moin Drullo321,
Fast.
In der Aufrufzeile muss erstens die Variable IP wirklich in der Schreibweise %IP% eingefügt werden:
Wenn Du immer nur einen Datensatz mit einem Feld in der Tabelle hast, weißt Du doch nie, ob und wie aktuell dieser Wert ist.
Wäre nicht sinnvoller, jeweils einen neuen DS anzufügen mit zumindest der Datumsangabe und beim SELECT den Neuesten zu holen?
Zweitens...bevor Du das Statement abfeuern kannst, solltest Du ja a) connected und b) authentifiziert sein.
Also wäre es evtl sinnvoller, aus dem Batch heraus eine kleine update.sql zu schreiben, in der zuerst Schritt a) und b) und dann als Schritt c) diese UPDATE-Zeile.
Und dazu wiederum wäre es am sinnvollsten, zuerst so eine Mini-.sql nur mit a) und b) anzulegen und zum Fliegen zu bringen und dann c) anzufügen.
Grüße
Biber
Fast.
In der Aufrufzeile muss erstens die Variable IP wirklich in der Schreibweise %IP% eingefügt werden:
... "UPDATE dbtabelle SET adress = '%IP%' WHERE id = 1"
Hierzu solltest Du einfach mal diesen Teil (oder die ganze Zeile) mit vorangestelltem "ECHO" anzeigen lassen vor dem Ausführen.ECHO Statement; "UPDATE dbtabelle SET adress = '%IP%' WHERE id = 1"
Wobei offen gestanden der Sinn dieses Updates mir noch verschlossen bleibt.Wenn Du immer nur einen Datensatz mit einem Feld in der Tabelle hast, weißt Du doch nie, ob und wie aktuell dieser Wert ist.
Wäre nicht sinnvoller, jeweils einen neuen DS anzufügen mit zumindest der Datumsangabe und beim SELECT den Neuesten zu holen?
Zweitens...bevor Du das Statement abfeuern kannst, solltest Du ja a) connected und b) authentifiziert sein.
Also wäre es evtl sinnvoller, aus dem Batch heraus eine kleine update.sql zu schreiben, in der zuerst Schritt a) und b) und dann als Schritt c) diese UPDATE-Zeile.
Und dazu wiederum wäre es am sinnvollsten, zuerst so eine Mini-.sql nur mit a) und b) anzulegen und zum Fliegen zu bringen und dann c) anzufügen.
Grüße
Biber
Moin Drullo321,
klar kann ich das.
Sobald Du die Vorarbeit "zuerst so eine Mini-.sql nur mit a) und b) anzulegen und zum Fliegen zu bringen" erledigt hast und diese zwei Zeilen funktionieren, kannst Du dieses Gerüst als ConnectMe.sql abspeichern.
Im Batch bruchst Du dann nur noch zu schreiben:
Grüße
Biber
klar kann ich das.
Sobald Du die Vorarbeit "zuerst so eine Mini-.sql nur mit a) und b) anzulegen und zum Fliegen zu bringen" erledigt hast und diese zwei Zeilen funktionieren, kannst Du dieses Gerüst als ConnectMe.sql abspeichern.
Im Batch bruchst Du dann nur noch zu schreiben:
...[...IP-Ermittlung...]
Copy ConnectMe.sql %temp%\IpUpdate.sql
ECHO UPDATE dbtabelle SET adress = '%IP%' WHERE id = 1; >>%temp%\IpUpdate.sql
[PfadZurMysql.exe]mysql -e %temp%\IpUpdate.sql
REM -oder- START %temp%\IpUpdate.sql
Grüße
Biber
Nun mal keine Panik, Drullo321,
immerhin war diese Aktion Deine Idee und nicht meine. Ich hätte mich so etwas nie getraut.
Dann machen wir es ganz spartanisch und mit der zeitlosen Eleganz von Münteferings Socken.
Das sollte das machen, was Dein Plan ist.
Den tieferen Sinn begreife ich nicht. Muss ja auch nicht sein.
Grüße
Biber
immerhin war diese Aktion Deine Idee und nicht meine. Ich hätte mich so etwas nie getraut.
Dann machen wir es ganz spartanisch und mit der zeitlosen Eleganz von Münteferings Socken.
::----DerGanzeUpdateIPBatch.cmd --
@echo off & setlocal
Set "pfadzurMySqlexe=D:\as\musst\Du\anpassen"
for /f "tokens=2" %%i in ('nslookup xyz.dyndns.org^|find "Add"') do set "IP=%%i"
Set stmt="UPDATE dbtabelle SET adress = '%IP%' WHERE id = 1"
"%pfadzurMySqlexe%\mysql" --user=DeinDrulloname --password=DeinDrulloPassword --execute=%stmt% DeinDBName
:: -ODER alternativ zur Vorzeile
:: ALTERNATIV :"%pfadzurMySqlexe%\mysql" --u DeinDrulloname -p DeinDrulloPassword -e %stmt% DeinDBName
Das sollte das machen, was Dein Plan ist.
Den tieferen Sinn begreife ich nicht. Muss ja auch nicht sein.
Grüße
Biber
Moin Drullo321,
dann versuchen wir mal, den/die Fehler zu finden.
Du kannst es einweder dam CMD-Prompt testen und dann bei allen Zählvariablen (=alle %%i usw in FOR-Anweisungen) ein statt zwei %-Zeichen schreiben.
Oder im Batch die Anweisung vor dem Ausführen mit "echo der befehl der ausgeführt werden soll" anzeigen lassen.
Und Schließen kannst Du durch eine neue Zeile "pause" verhindern.
In der jetzigen Variante ist das Setzen der %pfadZurMySQLexe% ohnehin nicht nötig. mySql.exe wird ja nur 1x aufgerufen. Streichen.Im Moment ist Als ich meinen Kommentar geschrieben habe war die erste SET-Anweisung ohnehin falsch. Siehe Set /?.
Also bitte testen am CMD-Prompt:
..und jeweils nur weitertesten, wenn von der ersten Zeile an alles etwas Brauchbares zurückgibt.
Eventuell sinnvoll: erstmal ein einfaches SELECT via CMD-Prompt testen.
[Edit] Okay, fehlt nur noch die Kontrolle mit "echo [%IP%]" und echo [%stmt%], den Rest hast Du schon selbst gefunden. [/Edit]
Gruß
Biber
dann versuchen wir mal, den/die Fehler zu finden.
Du kannst es einweder dam CMD-Prompt testen und dann bei allen Zählvariablen (=alle %%i usw in FOR-Anweisungen) ein statt zwei %-Zeichen schreiben.
Oder im Batch die Anweisung vor dem Ausführen mit "echo der befehl der ausgeführt werden soll" anzeigen lassen.
Und Schließen kannst Du durch eine neue Zeile "pause" verhindern.
In der jetzigen Variante ist das Setzen der %pfadZurMySQLexe% ohnehin nicht nötig. mySql.exe wird ja nur 1x aufgerufen. Streichen.
Also bitte testen am CMD-Prompt:
nslookup sxyz.dyndns.org|find "Add"
for /f "tokens=2" %i in ('nslookup sxyz.dyndns.org^|find "Add"') do set "IP=%i"
echo IP: [%IP%]
Set stmt="UPDATE tabelle2 SET adress = '%IP%' WHERE id = 1"
echo Stmt: [%Stmt%]
"C:\xampp\mysql\bin\mysql.exe" --user=root --password=unkenntlichgemacht --execute=%stmt% datenbank
..und jeweils nur weitertesten, wenn von der ersten Zeile an alles etwas Brauchbares zurückgibt.
Eventuell sinnvoll: erstmal ein einfaches SELECT via CMD-Prompt testen.
Set stmt="Select adress from tabelle2 WHERE id = 1"
echo Stmt: [%Stmt%]
"C:\xampp\mysql\bin\mysql.exe" --user=root --password=unkenntlichgemacht --execute=%stmt% datenbank
[Edit] Okay, fehlt nur noch die Kontrolle mit "echo [%IP%]" und echo [%stmt%], den Rest hast Du schon selbst gefunden. [/Edit]
Gruß
Biber