Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Externe IP auslesen und in Datei und Datenbank schreiben

Frage Entwicklung Batch & Shell

Mitglied: 59494

59494 (Level 1)

04.01.2008, aktualisiert 05.01.2008, 12545 Aufrufe, 12 Kommentare

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
Mitglied: utopia
04.01.2008 um 03:08 Uhr
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
01.
nslookup //dein_dnydns_name//.dyndns.org
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:
01.
echo "127.0.0.1  localhost ip_address" > C:/Windows/System32/Drivers/etc/hosts
Schritt 3: Datenbank aktualisieren
01.
\\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.
Bitte warten ..
Mitglied: 59494
04.01.2008 um 14:06 Uhr
Erstmal vielen Dank für die Antwort. Die hat mir viel zu meinem Veständnis geholfen.
Mittlerweile habe ich feststellen können dass ich die Hostfile doch nicht mehr brauche.

Ich habe jetzt zwar verstanden wie ich das als permanten Job einrichten kann, nicht aber wie ich das selbst mache.
Sprich ich erstelle ne Txt, bennene die zu xyz.cmd um(richtig?) und dann bearbeiten und da kommt das script rein.
Aber wie weiter?

nslookup xyz.dyndns.org
\\PFAD-ZU-MYSQL-BIN\\/mysql -e "UPDATE GewuenschteTabelle SET adress= "ip_address" WHERE id = 1"

So GewueschteTabelle ist der Tabellenname? Ja aber die Datenbank muss doch auch noch angegeben werden oder
Und wo find ich den Pfad zur mysql-bin.
In dem obigen Zweizeiler fehlt doch irgendwie noch der übergang, sprich auslesen der ip(steht ja adress: xxx.xxx.xxx.xx

Sorry, das klingt so blöd was ich schreibe aber ich weiß das alles wirklich nicht


Edit: Bin schon weiter:
test.bat=>

REM 1. * IP-Adresse mittels ipconfig auslesen u. in ip1.txt schreiben *
nslookup schlingendorntal.dyndns.org | find "Ad" > ip1.txt
REM * ergibt den Inhalt " IP-Adresse. . . . . . . . . . . . : 213.123.123.123" in ip1.txt *

REM 2. * nun den vorderen Teil " IP-Adresse. . . . . . . . . . . . :" in ip2.txt ablegen *
for /f "tokens=1-2 delims=:" %%i in (ip1.txt) do echo %%j > ip2.txt

Und wie gehts nun weiter

In der Ip2.txt steht nun die ip-Adress leider mit leerzeichen so in etwa(ohne ""): " xx.xxx.xxx.xx"

Wie gehts weiter sprich wieder auslesen(vielleicht ohne leerzeichen) und dann
Bitte warten ..
Mitglied: Biber
04.01.2008 um 15:59 Uhr
Moin Drullo321,

willkommen im Forum.
Zum Zwischenspeichern der gefundenen IP folgende Zeilen in Deine Batchdatei einbauen:
01.
:: ----HoleIPviaNslookup.cmd 
02.
@echo off & setlocal 
03.
for /f "tokens=2" %%i in ('nslookup xyz.dyndns.org^|find "Add"') do set "IP=%%i" 
04.
.... 
05.
:: 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 doofe Notepad die Endung ".txt" anhängt.

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
Bitte warten ..
Mitglied: 59494
04.01.2008 um 16:08 Uhr
Ja tut mir leid. Mit der Nachfrage zur mysqlbin meinte ich eher das Format, also z.Bsp. C:\xyz\xyz oder doch C:/xyz/xyz.

Kannst du bitte nochmal über das Script schauen. Es sieht nun folgendermaßen aus:

@echo off & setlocal
for /f "tokens=2" %%i in ('nslookup schlingendorntal.dyndns.org^|find "Add"') do set "ip_adress=%%i"
C:\xampp\mysql\data\datenbankname\ /mysql -e "UPDATE dbtabelle SET adress = "ip_adress" WHERE id = 1"
Bitte warten ..
Mitglied: Biber
04.01.2008 um 16:45 Uhr
Moin Drullo321,

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
Bitte warten ..
Mitglied: 59494
04.01.2008 um 16:57 Uhr
Hört sich total kompliziert an. Kannst du mir was kleines schreiben ;(
Bitte warten ..
Mitglied: Biber
04.01.2008 um 17:12 Uhr
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:
01.
...[...IP-Ermittlung...] 
02.
Copy ConnectMe.sql %temp%\IpUpdate.sql 
03.
ECHO UPDATE dbtabelle SET adress = '%IP%' WHERE id = 1; >>%temp%\IpUpdate.sql 
04.
[PfadZurMysql.exe]mysql -e %temp%\IpUpdate.sql 
05.
REM -oder- START %temp%\IpUpdate.sql
Grüße
Biber
Bitte warten ..
Mitglied: 59494
04.01.2008 um 20:47 Uhr
Hilfe, Bahnhof.

Du verlangst von mir etwas das so klingt wie als wäre ich nen Pilot, von dem verlangt wird mal eben ne schwierige HerzOp drchzuführen

Also sehe ich das richtig. Ich habe eine COnnectMeSql mit zwei Zeilen, die die Zugangsdaten für mysql enthalten. Dann habe ich hier die batch. Was ist das für ne IPUpdate.sql

Ich blicke überhaupt nicht durch und habe 0 Ahnung ;(
Bitte warten ..
Mitglied: Biber
05.01.2008 um 01:23 Uhr
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.
01.
::----DerGanzeUpdateIPBatch.cmd -- 
02.
@echo off & setlocal 
03.
Set "pfadzurMySqlexe=D:\as\musst\Du\anpassen" 
04.
for /f "tokens=2" %%i in ('nslookup xyz.dyndns.org^|find "Add"') do set "IP=%%i" 
05.
Set stmt="UPDATE dbtabelle SET adress = '%IP%' WHERE id = 1" 
06.
"%pfadzurMySqlexe%\mysql" --user=DeinDrulloname --password=DeinDrulloPassword --execute=%stmt% DeinDBName 
07.
:: -ODER alternativ zur Vorzeile 
08.
:: 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
Bitte warten ..
Mitglied: 59494
05.01.2008 um 11:14 Uhr
Ich habe dein Script noch ein wenig editiert (weil es nicht so funktioniert hat):

@echo off & setlocal
Set abc=C:\xampp\mysql\bin\mysql.exe
for /f "tokens=2" %i in ('nslookup xyz.dyndns.org^|find "Add"') do set "IP=%i"
Set stmt="UPDATE tabelle SET address = '%IP%' WHERE id = 1"
%abc% --user=root --password=meinPW --execute=%stmt% datenbank

Jetzt habe ich nur noch EIN Problem
Wenn ich das zeilenweise manuell in cmd eingebe, funktioniert es.
Wenn ich es per bat ausführen lasse, hängt er mir noch ein ) hinter die IP in der DB also xx.xx.xx.xx) ODER wie jetzt erade ändert gar nichts wenn ich das script ausführe
Wie beheb ich das?
Bitte warten ..
Mitglied: Biber
05.01.2008 um 11:57 Uhr
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:
01.
nslookup sxyz.dyndns.org|find "Add" 
02.
for /f "tokens=2" %i in ('nslookup sxyz.dyndns.org^|find "Add"') do set "IP=%i" 
03.
echo IP: [%IP%] 
04.
Set stmt="UPDATE tabelle2 SET adress = '%IP%' WHERE id = 1" 
05.
echo Stmt: [%Stmt%] 
06.
"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.
01.
Set stmt="Select adress from  tabelle2 WHERE id = 1" 
02.
echo Stmt: [%Stmt%] 
03.
"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
Bitte warten ..
Mitglied: 59494
05.01.2008 um 12:08 Uhr
Kannst du nochmal mein Edit lesen. habe massiv editiert während du das wohl geschrieben hast. tut mir leid. Während dessen les ich mir deins nochmal durch

wenn ich im script wieder %I durch %%i ersetze geht es wieder aber nur automatisch ausgeführt. Unlogisch für mich
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Router & Routing
gelöst Zwei verschiedene Externe IP Adressen über ein Netzwerk? (8)

Frage von aif-get zum Thema Router & Routing ...

LAN, WAN, Wireless
Gerät über IP auslesen? (7)

Frage von baxxter333 zum Thema LAN, WAN, Wireless ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...