VPN-Tunnel überprüfen ob steht und dann Netzlaufwerk verbinden

  • Hi

    ich verbinde mit meinem Tool einen SSL VPN Tunnel. Dies wird über ein externes Programm realisiert. Dieses gibt mir leider nicht zurück ob der Tunnel verbunden wurde oder nicht.


    [autoit]

    ShellExecute(@ProgramFilesDir & "\Funkwerk\packetalarm SSL VPN Client\packetalarm_SSL_VPN_Client.exe", "/start /t=Zertifikat /u=" & $User & "@domain.local /pwd=" & $Password & " /cpwd=passwort")
    $ping = Ping("192.168.30.3",50000)
    MsgBox(0,"PING FOR IF",$ping)
    If $ping Then
    MsgBox(0,"PING AFTER IF",$ping)
    Sleep(2000)
    DriveMapAdd($Laufwerk, "\\SERVER\Netzlaufwerk", 0, "domain.local\" & $User, $Password)
    EndIf[

    [/autoit]

    Doch gibt mir dieses script direkt immer eine 0 für $ping (bei PING FOR IF) zurück...und nur mit Sleep zu arbeiten ist zu unflexibel, denn das Verbinden dauert nicht bei jedem gleich lang.

    Mache ich etwas mit Ping falsch oder wie könnte ich sonst überprüfen ob der Tunnel steht?

    mfg

  • das sagt die hilfe zu Ping() :
    Fehler: Gibt 0 zurück, wenn der Computer nicht angepingt werden kann oder andere Netzwerkfehler aufgetreten sind, und setzt @error auf (siehe Bemerkungen).

    Bemerkungen
    Wenn die Funktion scheitert(also 0 zurückgibt), enthält @error weitere Informationen:
    1 = Der Computer ist offline
    2 = Der Computer ist nicht erreichbar
    3 = Falsche Adresse
    4 = Andere Fehler

    einfach mal den error ausgeben lassen :P

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Das ist mir bewusst. Aber sollte er bei einem Timeout von 50 Sekunden nicht 50 Sekunden probieren?

  • Hallo

    mache es doch so:

    [autoit]

    ShellExecute(@ProgramFilesDir & "\Funkwerk\packetalarm SSL VPN Client\packetalarm_SSL_VPN_Client.exe", "/start /t=Zertifikat /u=" & $User & "@domain.local /pwd=" & $Password & " /cpwd=passwort")
    while $Ping = 0
    $ping = Ping("192.168.30.3",5000)
    wend
    MsgBox(0,"PING AFTER IF",$ping)
    ;Sleep(2000)
    DriveMapAdd($Laufwerk, "\\SERVER\Netzlaufwerk", 0, "domain.local\" & $User, $Password)

    [/autoit]
  • Jap eig. schon ist das bei dir nicht der fall oder was?

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • das ist eine lösung aber sollte die funk Ping() deine schleife nicht eig schon enthalten?

    Edit:

    außerdem kannst du so

    [autoit]

    $ping = Ping("192.168.30.3",50000)

    [/autoit]

    keinen anderen pc der zb.der deines nachbarns anpingen. du könntest hochstens seinen router anpingen.

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    2 Mal editiert, zuletzt von Darter (6. April 2010 um 11:50)

  • Timeout hat keine auswirkungen, er wirft direkt eine 0 zurück.
    Das mit der while schleife werde ich versuchen.

    mfg

  • Timeout hat keine auswirkungen, er wirft direkt eine 0 zurück.
    Das mit der while schleife werde ich versuchen.

    mfg

    hast du dir mal den error ausgeben lassen? Vllt liegt ja ein anderen Nezwerkfehler vor, sodass er dir direkt einen Fehler setzt

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Hallo

    noch einmal der Hinweis auf ShellexecuteWait. Wenn du dieses verwendest brauchst du die While Schleife nicht. Der 1. Ping danach muss erfolgreich sein, ansonsten war der Tunnelaufbau nicht erfolgreich,

    mfg (Auto)Bert

  • also bekommst als rückgabe wert von $ping = Ping("192.168.30.3",50000) 0 und dann auch noch vom @error eine 0?
    das kann ich schwer nachvollziehen, da in der hilf steht wenn der rückgabewert von Ping() 0 ist wir @error aud 1, 2,4 oder 4 gesetzt

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • jap ich bekomm für @error eine 0

    [autoit]


    $ping = Ping("192.168.30.3",50000)
    MsgBox(-1,"PING BEFORE IF",$ping)
    $err = @error
    MsgBox(-1,"ERROR",$err)

    [/autoit]

    in beiden msgboxen steht eine 0

    edit:

    das problem liegt wahrscheinlich daran, dass er noch keine ip hat solang er versucht den ping zu schicken. denn die virtuelle netzwerkkarte bekommt erst wenn der tunnel steht ne ip via dhcp und meine physikalische netzwerkkarte in einem anderen subnet liegt. damit kommt es wahrscheinlich nicht klar. *vermutung*

    Einmal editiert, zuletzt von x4FF3 (6. April 2010 um 12:50)

  • Hallo zusammen,

    das Scripting ist eigentlich nicht notwendig, da der verwendete packetalarm SSL VPN Client von Haus aus Programme nach erfolgreich aufgebauter VPN Verbindung ausführen kann:

    Dazu einfach unter VPN-Tunnel verwalten den entsprechenden Tunnel auswählen und auf "Erweiterte Tunneleinstellungen" klicken. Hier kann jeweils ein Batch definiert werden welches nach Tunnelaufbau oder vor Tunnelabbau ausgeführt werden soll. Somit kann z.B. ein Netzlaufwerk nach Tunnel-Aufbau verbunden oder vor Tunnel-Abbau getrennt werden.

    Zu dem Thema steht auch was in der Hilfe des Programmes.

    Viele Grüße

  • Klassiker...

    [autoit]

    $ping = Ping("192.168.30.3",50000)
    MsgBox(-1,"PING BEFORE IF",$ping)
    $err = @error
    MsgBox(-1,"ERROR",$err)

    [/autoit]

    ich gehe davon aus, daß du den @error vom Ping haben wolltest und nicht den der Msgbox, aber den fragst du ab^^

    AutoBerts Lösung erschlägt in einer Zeile alles, hast du das mal getestet?

  • Darter

    Zitat

    $ping = Ping("192.168.30.3",50000)


    warum sollte er den nicht anpingen können wenn sein Vpnclient sich verbunden hat bzw. ein globaler Tunnel Lan2Lan mit passenden Routing aktiv ist.
    Genau dafür ist VPN da den Router extern sofern erlaubt kann ich auch ohne VPN anpingen :)

    Anonsten google route add -p Netz Mask GW :huh:

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hallo ts1612 und nachfolgende Poster,

    der Threaderstellerr war seit 7.5.2010 nicht mehr online, dies ist sein einziger Thread. Er halt also nach dem Hinweis [ offen ] VPN-Tunnel überprüfen ob steht und dann Netzlaufwerk verbinden entweder sein Problem gelöst oder aufgegeben, eine weitere Diskussion ist also unnötig. Hier noch einmal die Lösung in Skriptform:

    [autoit]

    ShellExecuteWait(@ProgramFilesDir & "\Funkwerk\packetalarm SSL VPN Client\packetalarm_SSL_VPN_Client.exe", "/start /t=Zertifikat /u=" & $User & "@domain.local /pwd=" & $Password & " /cpwd=passwort")
    $ping = Ping("192.168.30.3",50000)
    MsgBox(0,"PING FOR IF",$ping)
    If $ping Then
    MsgBox(0,"PING AFTER IF",$ping)
    Sleep(2000)
    DriveMapAdd($Laufwerk, "\\SERVER\Netzlaufwerk", 0, "domain.local\" & $User, $Password)
    EndIf[

    [/autoit]

    mfg autoBert