brubakerbaby
Goto Top

IP-Adresse finden, mit Registry-Eintrag vergleichen und wenn neu aendern bzw. setzen

Der Registry-Eintrag ist eine gespeicherte Putty-Session (Ssh Tunnel Option) die immer die aktuelle IP-Adresse des Rechners enthalten soll. Die lokale Ip-Adresse (Windows XP Pro) wird allerdings regelmäßig per Dhcp neu zugewiesen (kurze leasetime).

Hallo,

ich möchte die IP-Adresse meines Rechners welche in gespeicherten Registry-Putty-Sessions (SSH Tunnel Option) steht, aktualisieren wenn diese per Dhcp wiedermal geaendert wurde.

Wie bekomme ich das mit einfachen Boardmitteln (batch, regedit) hin? Hier der Reg-Key:

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\sessionname]
...
"PortForwardings"="R1234=192.168.2.23:1234,"

Beste Grüße
Bru

Content-Key: 100445

Url: https://administrator.de/contentid/100445

Printed on: April 20, 2024 at 02:04 o'clock

Mitglied: 60730
60730 Oct 28, 2008 at 14:08:09 (UTC)
Goto Top
Servus,

trag dort doch einfach (einmalig) den Namen ein, der dir mit:
echo %computername%
"ausgeworfen" wird.

Gruß
Member: brubakerbaby
brubakerbaby Oct 29, 2008 at 07:23:15 (UTC)
Goto Top
Hmm, war ne gute Idee, aber leider klappt das so nicht.

Ein "ping $computername" von seiten der Instanz wohin der Tunnel aufgebaut wird (eine Linux Maschine) kann das so nicht auflösen.

Hab auch mit "set" nachgeschaut ob in den Umgebungsvariabeln evtl ein anderer Eintrag existiert der die IP-Addresse zurückgibt, leider nicht. Oder kennst Du einen weitere Variable, welche die IP-Addresse ausspuckt?
Mitglied: 60730
60730 Oct 29, 2008 at 09:45:37 (UTC)
Goto Top
Servus,

mit diesem vbs schnippsel kannst du deine eigene Ip auflösen.

Nur läuft der Schnippsel natürlich auch wieder nicht unter Tux...
von daher - bevor wir diesen Ansatz weiterverfolgen...
Set IPConfigSet = GetObject("winmgmts://.").ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")  
    For Each IPConfig In IPConfigSet
            If Not IsNull(IPConfig.IPAddress) Then
                    For i=LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
                    WScript.Echo "" & IPConfig.IPAddress(i)  
                    Next
            End If
    Next

Kannst du uns noch mal schnell erklären, wie genau du dir eine Lösung vorstellst?

Das Script soll auf Windows laufen und die eigene IP im fremdsystem eintragen?

Wenn ja- wie kriegst du die Verbindung zwischen den Systemen hin, wenn der Tunnel "weg" ist - weil du eine neue IP bekommen hast?

Gruß
Member: brubakerbaby
brubakerbaby Oct 29, 2008 at 10:11:59 (UTC)
Goto Top
Vorab Danke!

Nee, es ist etwas einfacher.

1. Auf dem Windows System werden Putty Sessions angelegt die in der Registry gespeichert werden.
2. Diese Sessions beinhalten einen Putty-initierten-Tunnel-Aufbau dessen einer Teil die eigene IP-Adresse ist und der andere Teil die lokale und remot Portnummer.
3. Die IP-Adresse des Windows PCs ändert sich aufgrund von dhcp und soll deshlab in der Registry aktualisiert werden.

Somit ist der Rückkanal zum Tunnel-initierenden Rechner korrekt.

regedit info:

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\sessionname]
...
"PortForwardings"="R1234=192.168.2.23:1234,"


PS aktivePerl steht auf der Windows XP Seite zur Verfügung; aber lieber ne batch
Mitglied: 60730
60730 Oct 29, 2008 at 11:39:13 (UTC)
Goto Top
Servus again,

du brauchst 2 Schnippsel - die gehen davon aus, daß Sie im Ordner
c:\script\reg
liegen.
Bei Bedarf bitte anpassen.
ip.cmd
type C:\script\reg\ip-tmp.cmd > C:\script\reg\ip.bak
pause
cscript /nologo C:\script\reg\ip.vbs >C:\script\reg\ip-tmp.cmd
fc C:\script\reg\ip-tmp.cmd C:\script\reg\ip.bak
if %errorlevel%==0  goto end
:import
call C:\script\reg\ip-tmp.cmd
@echo Windows Registry Editor Version 5.00>C:\script\reg\key.reg
@echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\sessionname]>>C:\script\reg\key.reg
@echo "PortForwardings"="%Portforwardings%">>C:\script\reg\key.reg  
regedit /s C:\script\reg\key.reg
:end
IP.vbs
Set IPConfigSet = GetObject("winmgmts://.").ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")  
    For Each IPConfig In IPConfigSet
            If Not IsNull(IPConfig.IPAddress) Then
                    For i=LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
                    WScript.Echo "Set Portforwardings=" & IPConfig.IPAddress(i)  
                    Next
            End If
    Next
Ich hab grade nicht wirklich Zeit, um die (in meinen Augen eh schon viel zu große Abfrage) noch um Rems zu erweitern - denke aber - Sie ist (wenn schon nicht elegant) wenigstens nachvollziehbar.

Gruß
Member: brubakerbaby
brubakerbaby Oct 29, 2008 at 12:20:07 (UTC)
Goto Top
Hi,

das Registry Ergebnis nach dem ausführen von "ip.cmd" lautet:

"PortForwardings"="10.224.116.62" statt
"PortForwardings"="Rport=192.168.2.23:port,"

Es wurde also, wenn auch noch nicht ganz richtig, die richtige IP gesetzt!

Es erfolgt auch eine Fehlermeldung beim Ausführen von "ip.cmd" -> ip-tmp.cmd "..konnte nicht gefunden werden."

Das Kompilierungsproblem in ip.vbs konnte ich durch das entfernen des Umbruchs beheben. Ich vermute die Fensterausgabe ist eine Art Statusmeldung.

bru
Mitglied: 60730
60730 Oct 29, 2008 at 12:37:12 (UTC)
Goto Top
Zitat von @brubakerbaby:
Hi,

das Registry Ergebnis nach dem ausführen von "ip.cmd"
lautet:

"PortForwardings"="10.224.116.62" statt
"PortForwardings"="Rport=192.168.2.23:port,"

Es wurde also, wenn auch noch nicht ganz richtig, die richtige IP
gesetzt!

Tausche im vbs die Zeile 5 gegen diese aus:
WScript.Echo "Set Portforwardings=Rport=" & IPConfig.IPAddress(i) & ":port,"  
bzw. Sinngemäß

Es erfolgt auch eine Fehlermeldung beim Ausführen von
"ip.cmd" -> ip-tmp.cmd "..konnte nicht gefunden
werden."

Das sollte nur beim allerersten Lauf der Fall sein.

Wenn es dich stört, dann ist das deine neue Zeile 1 in ip.cmd
 if exist C:\script\reg\ip-tmp.cmd type C:\script\reg\ip-tmp.cmd > C:\script\reg\ip.bak 


Edit
Die beiden Dateien "C:\script\reg\ip.bak" und "C:\script\reg\ip-tmp.cmd" nehme ich als Abgleich - ob seit dem letzten Lauf die Ip geändert wurde.
Da die "C:\script\reg\ip-tmp.cmd" beim ersten Lauf noch nicht vorhanden ist - kommt diese Meldung das erste Mal.

Das Kompilierungsproblem in ip.vbs konnte ich durch das entfernen des
Umbruchs beheben. Ich vermute die Fensterausgabe ist eine Art
Statusmeldung.

Wenn du das Vbs alleine laufen läßt - kommt das Ergebnis als Fensterausgabe.
Läßt du es per cmd laufen - erzeugt es durch ">" die C:\script\reg\ip-tmp.cmd
bru
Gruß
Member: brubakerbaby
brubakerbaby Oct 29, 2008 at 13:01:18 (UTC)
Goto Top
Okay sieht bis auf eine Ausnahme funktionsfähig aus! face-smile

"Rport" und "port" waren meinerseits als Platzhalter ($) gedacht. Mea culpa! ;)

Die in der Registry vorhandenen Ports in den gespeicherten Sessions sollen erhalten bleiben (siehe snip meines erstes posting; "R9998"..)

Bru


PS Sollte die angelegte "ip.bak" wirklich leer sein?
Mitglied: 60730
60730 Oct 29, 2008 at 13:37:50 (UTC)
Goto Top
Zitat von @brubakerbaby:
Okay sieht bis auf eine Ausnahme funktionsfähig aus! face-smile

..und die wäre?

"Rport" und "port" waren meinerseits als
Platzhalter ($) gedacht. Mea culpa! ;)

Die in der Registry vorhandenen Ports in den gespeicherten Sessions
sollen erhalten bleiben (siehe snip meines erstes posting;
"R9998"..)
"R9998" finde ich Hier nur 3* - einmal unter "brubakerbaby schreibt am 29.10.2008 um 14:01:18 Uhr:" und zweimal in dieser Antwort.

Von daher - ich kann dir leider nicht so richtig folgen. Kannst du mir mal ein Beispiel geben - vorher - nacher?



Bru


PS Sollte die angelegte "ip.bak" wirklich leer sein?
"nein" die .bak ist eine Kopie der ip-tmp.cmd, nur wenn die leer sein sollte -ist es die .bak auch
Aber wie geschrieben -nur beim ersten Mal.
(Wie sollte sonst ein Abgleich vorher / nachher realisiert werden können)
Member: brubakerbaby
brubakerbaby Oct 30, 2008 at 07:13:17 (UTC)
Goto Top
"R9998" finde ich Hier nur 3* - einmal unter
"brubakerbaby schreibt am 29.10.2008 um 14:01:18 Uhr:" und
zweimal in dieser Antwort.

Von daher - ich kann dir leider nicht so richtig folgen. Kannst du
mir mal ein Beispiel geben - vorher - nacher?

Ups, ich meinte natürlich "R1234" statt "9998". Die Ports werden mit den anderen Session Informationen vor und hinter der IP-Addresse abgelegt.

Beispiel:
"PortForwardings"="R1234=192.168.2.23:1234,"  

(Man beachte. neben der Syntax "Rport=IP:port", auch das "Komma" am Ende, nicht so wie ich am Anfang ;) )


PS Sollte die angelegte "ip.bak" wirklich leer sein?
"nein" die .bak ist eine Kopie der ip-tmp.cmd, nur wenn die
leer sein sollte -ist es die .bak auch
Aber wie geschrieben -nur beim ersten Mal.
(Wie sollte sonst ein Abgleich vorher / nachher realisiert werden
können)

Hamma wieder was gelernt! Danke für Deine Klarstellung!
Member: brubakerbaby
brubakerbaby Oct 30, 2008 at 14:07:53 (UTC)
Goto Top
Gibt es ein Lösung für die nachgefragte unstimmige letzte Sache?
Mitglied: 60730
60730 Oct 30, 2008, updated at Oct 18, 2012 at 16:36:28 (UTC)
Goto Top
Zitat von @brubakerbaby:
Gibt es ein Lösung für die nachgefragte unstimmige letzte
Sache?

Moin,

(Man beachte. neben der Syntax "Rport=IP:port", auch das "Komma" am Ende, nicht so wie ich am Anfang ;) )
Set IPConfigSet = GetObject("winmgmts://.").ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")  
    For Each IPConfig In IPConfigSet
            If Not IsNull(IPConfig.IPAddress) Then
                    For i=LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
                    WScript.Echo "Set Portforwardings=Rport=" & IPConfig.IPAddress(i) & ":port,"  
                    Next
            End If
    Next

schau dir mal ganz haargenau die Zeile 5 des.vbs an:
WScript.Echo "Set Portforwardings=Rport=" & IPConfig.IPAddress(i) & ":port,"

Damit meine ich ":port,"

Gruß
Member: brubakerbaby
brubakerbaby Oct 31, 2008 at 08:22:56 (UTC)
Goto Top
Ja, ich denke ich verstehe. Dort kann ich den bereits vorhandenen Port manuell eintragen. Eine Übernahme aus einer Variablen ist auch möglich?

Beste Grüße
Bru


PS ..unglaublich gute "Betreuung" hier..mille gracie!
Mitglied: 60730
60730 Oct 31, 2008 at 10:03:37 (UTC)
Goto Top
Moin,

Dort kann ich den bereits vorhandenen Port manuell eintragen
face-wink - nein - du mußt es sogar face-wink
Eine Übernahme aus einer Variablen ist auch möglich?
Toyota!! oder nichts ist unmöglich - du mußt die Variable nur vorher definieren.

Gruß

PS ..unglaublich gute "Betreuung" hier..mille gracie!
sei il benvenuto
Member: brubakerbaby
brubakerbaby Oct 31, 2008 at 10:15:42 (UTC)
Goto Top
Zitat von @60730:

Toyota!! oder nichts ist unmöglich - du mußt die
Variable nur vorher definieren.

Ich habe verdammt keine Ahnung stelle ich gerade fest. Eine Schande :/

Ich hab nicht den blassen schimmer wie ich "R1234" und "1234" in zwei Variablen packe in dem vbs script. Um es dann an anderer Stelle wieder zu platzieren face-sad

Entschuldigung!


BTW, ich kann das so benutzen. Daher möchte ich mich an dieser Stelle nochmal für die tolle Hilfe bedanken und setze den Thread auf gelöst!
Mitglied: 60730
60730 Oct 31, 2008 at 11:00:48 (UTC)
Goto Top
Servus again,

zuerst - du brauchst nicht zwei Variablen - sondern nur eine (names Port) - denn R1234 sollte auch identisch mit:1234 sein.

Der vollständigkeit halber mal alles - am Stück.

if exist C:\script\reg\ip-tmp.cmd type C:\script\reg\ip-tmp.cmd > C:\script\reg\ip.bak
cscript /nologo C:\script\reg\ip.vbs >C:\script\reg\ip-tmp.cmd
fc C:\script\reg\ip-tmp.cmd C:\script\reg\ip.bak
if %errorlevel%==0  goto end

:import
call C:\script\reg\ip-tmp.cmd
@echo Windows Registry Editor Version 5.00>C:\script\reg\key.reg
@echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\127.0.0.1]>>C:\script\reg\key.reg
@echo "PortForwardings"="%Portforwardings%">>C:\script\reg\key.reg  
regedit /s C:\script\reg\key.reg
:end

IP.vbs
Port= InputBox("Port:       ", "    Welcher Port?")  

Set IPConfigSet = GetObject("winmgmts://.").ExecQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")  
    For Each IPConfig In IPConfigSet
            If Not IsNull(IPConfig.IPAddress) Then
                    For i=LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress)
                    WScript.Echo "Set Portforwardings=R" & port & "=" & IPConfig.IPAddress(i) & ":" & port & ","  
                    Next
            End If
    Next
Wenn du dir die erste Zeile im .vbs ansiehst - erkennst du "wie" die Variable Port gefüllt wird. Die könntest du aber auch "fest" via
Port = 1234
festlegen - nur wäre eine feste variable eher nicht dein Ziel?
Oder doch ?

Gruß
Member: brubakerbaby
brubakerbaby Oct 31, 2008 at 11:53:58 (UTC)
Goto Top
Doch, absolut! face-smile

Hab es übernommen und bin sehr zufrieden.

Klasse Seite, klasse Forum...klasse Leute! ;)