thecranky
Goto Top

Batch soll überprüfen ob sich IP geändert hat

Hallo Community,

ich möchte gerne mit einer batch überprüfen ob ich einen neue Internet IP bekommen habe

1. überprüfe welche IP man hat

nach einer gewissen zeit (oder nach ein paar anderen befehlen die in der zwichenzeit laufen) (Goto)

2. überprüffen ob die aktuelle IP noch stimmt oder eine neue existiert

- noch gleich: nach gewisser zeit nochmal prüfen oder mit anderen befehlen weitermachen (Goto)
- nicht mehr gleich: meinen angegebenen befehl folgen


Mir ist es eigendlich egal ob eine datei erstellt wird mit der IP oder ein "set %OLTIP%=( in punkt 1 überprüfte IP )" um den vergleich in punkt 2 zu starten.

MfG TheCranky

Content-ID: 151788

Url: https://administrator.de/forum/batch-soll-ueberpruefen-ob-sich-ip-geaendert-hat-151788.html

Ausgedruckt am: 26.12.2024 um 04:12 Uhr

60730
60730 26.09.2010 um 21:10:10 Uhr
Goto Top
moin,

also für solche Fälle hat sich das preisgeben seiner Infrastruktur als äußert sinnvolle Massnahme erwiesen.

Mir ist es eigendlich egal ob eine datei erstellt wird mit der IP oder ein "set %OLTIP%=( in punkt 1 überprüfte IP )" um den vergleich in punkt 2 zu starten.

Nein ist es sicherlich nicht, denn 1 bedeutet - das script muß in eine Datei schreiben dürfen können - zwei bedeutet es muß eine Systemvariable gesetzt werden oder die batch wird zum dauerläufer und damit auch anfälliger für alle möglichen Probleme ....

Gruß
bastla
bastla 26.09.2010, aktualisiert am 18.10.2012 um 18:43:36 Uhr
Goto Top
Hallo TheCranky!

Zu Punkt 1: Externe IP ermitteln und in Datei Speichern

[Edit] ... bzw als Ansatz:
@echo off & setlocal
set "Log=D:\IP.txt"  

set ExtIPOld=-
if exist "%Log%" set /p ExtIPOld=<"%Log%"  

set URL=http://checkip.dyndns.com/
set G=%temp%\GetHTML.vbs
echo On Error Resume Next:Set Http=CreateObject("WinHttp.WinHttpRequest.5.1"):Http.Open "GET",WScript.Arguments(0),False:Http.Send:Q=Split(Http.ResponseText,":")(1):WScript.Echo Trim(Split(Q,"<")(0))>%G%  

:Check
set ExtIP=
for /f %%i in ('cscript //nologo %G% "%URL%"') do set "ExtIP=%%i"  
if not defined ExtIP goto :NichtBekannt

if %ExtIP%==%ExtIPOld% goto :NochGleich
>"%Log%" echo %ExtIP%  
set "ExtIPOld=%ExtIP%"  
::
:: Aktionen für veränderte IP
::
goto :Check

:NochGleich
::
:: Aktionen für unveränderte IP
::
goto :Check

:NichtBekannt
echo %date% %time:~,8% Externe IP konnte nicht ermittelt werden.
::
:: Aktionen für IP nicht bekannt
::
goto :Check
Bitte darauf achten, dass am Ende der Zeile 17 kein Leerzeichen stehen darf!
[/Edit]

Grüße
bastla
TheCranky
TheCranky 26.09.2010 um 21:24:01 Uhr
Goto Top
Zitat von @60730:
moin,

also für solche Fälle hat sich das preisgeben seiner Infrastruktur als äußert sinnvolle Massnahme erwiesen.

Sry verstehe nicht was du meinst

Zitat von @60730:
Nein ist es sicherlich nicht, denn 1 bedeutet - das script muß in eine Datei schreiben dürfen können

was ist davon abhängig

also ich meinte damit das eine zB txt datei erstellt wird indem die alte IP gespeichert wird und wo auch später die neuen IP gespeichert werden für vergleiche

Zitat von @60730:
zwei bedeutet es muß eine Systemvariable gesetzt werden oder die batch wird zum dauerläufer und damit auch anfälliger
für alle möglichen Probleme ....

Die Batch ist ein Dauerläufer bis man sie von hand via X beendet.

Sie startet am anfang einen HomeGameServer. Bekommt man eine neue IP muss der MasterGameServer die neue IP wissen. dafür muss der HomeGameServer nach dem man eine neue IP hat neu gestartet werden. und das macht die Batch.

zZ kann meine batch testen ob generel die intenetverbindung getrennt worden ist, dafür ping ich eine seite an. aber was wenn die seite bzw. IP mal nicht anpingbar ist? dafür will ich die eigene IP testen ob sie neu ist.
TheCranky
TheCranky 26.09.2010 um 23:37:06 Uhr
Goto Top
Danke face-smile hilft sehr

habs auch so ähnlich gefunden, und dann abgeändert

und die GetHTML.vbs habe ich manuel erstellt. dann muss die nicht immer erstellt und wieder gelöscht werden.

habe aber zwei verschiedene erstellt:

Die 1.
wenn ich die bat ausführe prüft er das internet und setzt die aktuelle IP auf "OldIP"

ist das inet vorhanden, startet er den server

@echo off & setlocal

:: Nicht exsistierende IP auf OldIP setzten
set OldIP=000.000.000.000

:: Ueberpruefen der aktuellen IP und neue IP auf NewIP setzen
:Check
set URL=http://checkip.dyndns.com/
set NewIP=
for /f %%i in ('cscript //nologo GetHTML.vbs "%URL%"') do set "NewIP=%%i"  

:: Wenn keine IP ermittelt werden konnte
if not defined NewIP (wait 3000 & goto :Check)

:: Wenn IP bekannt gehe zu XXXXX startet den Server)
Goto :XXXXX


die 2.

wenn der server gestartet ist überprüft die bat ob ich eine neue IP habe um dann den server zu beenden und neu zu starten

dafür kann ich nicht die erste benutzen da der befehl set OldIP=000.000.000.000 drinne steht und der den server deswegen neu starten würde.

@echo off & setlocal

:: Ueberpruefen der aktuellen IP und neue IP auf NewIP setzen
:Check
set URL=http://checkip.dyndns.com/
set NewIP=
for /f %%i in ('cscript //nologo GetHTML.vbs "%URL%"') do set "NewIP=%%i"  

:: Wenn keine IP ermittelt werden konnte
if not defined NewIP (wait 3000 & goto :Check)

:: Wenn beide IPs gleich gehe zu
if %NewIP%==%OldIP% goto :Check

:: Ersetzt die IP von OldIP gegen die IP von NewIP
set "OldIP=%NewIP%"  

:: Wenn IP geaendert gehe zu XXXXX (in meinem fall startet er den server neu und überprüft danach wieder die IP)
Goto :XXXXX

ich muss deswegen 2 machen da er zwichen den prüfungen andere dinge macht.