Bläul.de>Computer>von mir programmiert>VPNClientAutoLogin   

VPNClientAutoLogin

  1. Wozu ist das Programm gut?
  2. Bedienung
  3. Sourcecode
  4. Disclaimer
  5. Download-Link

 

 

  1. Wozu ist VPNClientAutoLogin gut?
    Das Programm startet die VPN Client Software der Firma Cisco Systems und meldet sich bei dem Standard-VPN-Zugang automatisch an.

    Ein VPN ist ein veschlüsselter Zugang zu einem Netz. Solange eine Verbindung hergestellt ist, hat man Zugriff auf alle Dienste, die das Zielnetz bietet, ohne tatsächlich physisch dort zu sein. In meinem Fall nutze ich den TU-VPN-Zugang, um den unverschlüsselten Teil des Bürgernetzes sicher zu überbrücken.

  2. Bedienung
    VPNClientAutoLogin muss in das gleiche Verzeichnis wie die bereits installierte Cisco VPN Client Software entpackt werden. Anschließend sollte eine Verknüpfung zu VPNClientAutoLogin.exe angelegt werden, bei der zusätzlich Benutzername und Klartext des Passworts, durch 1 Leerzeichen getrennt, angehängt sind. Hier die Schritte im Einzelnen:

    Installation:
    1. VPN Client Software installieren
    2. Programm-Archiv herunterladen
    3. EXE-Datei aus dem Archiv in das Installationsverzeichnis der Client-Software entpacken. Das ist bei Standard-Installation C:\Programme\Internet\Cisco Systems\VPN Client.
    4. Verknüpfung zu VPNClientAutoLogin.exe auf dem Deskop erstellen
    5. Verknüpfung bei gedrückter Alt-Taste doppelt anklicken.
    6. In das Registerblatt 'Verknüpfung' wechseln
    7. Im Feld 'Ziel' am Ende
      1. ein Leerzeichen,
      2. dann den Benutzernamen,
      3. dann wieder ein Leerzeichen
      4. jetzt das Passwort
      eingeben
    8. fertig

    Tipps:
    • Das Programm schickt virtuelle Tastendrücke an die Fenster der Client-Software. Leider klappt das nicht perfekt. Sollte nichts passieren, muss das Programm noch einmal gestartet werden, manchmal muss auch die Client-Software zwischendurch beendet werden.
    • Einloggen in ein VPN ist generell nur möglich, falls bereits eine Verbindung, meist zum Internet hergestellt ist.
    • Nach dem Einloggen kann VPNClientAutoLogin das Hauptfenster des Cisco VPN Clients verstecken. Dazu muss VPNClientAutoLogin nach dem erfolgreichen Login noch einmal gestartet werden.
    • Die verschlüsselte Verbindung besteht nur dann, wenn im Infobereich der Taskleiste (bei der Uhr) das geschlossene Vorhängeschoss angezeigt wird.
    • Der MTU-Wert muss möglicherweise verkleinert werden. So hat bei mir der Standardwert für DSL zwar ohne VPN funktioniert, aber mit musste ich die Größe auf die von ISDN herunterregeln. Die Änderung wird notwendig, wenn Internetseiten nicht mehr (vollständig) geladen werden.

  3. Source-Code
    Der komplette, unkommentierte Quellcode für Visual Basic 6 ist in der ZIP-Datei enthalten. Das Windows-API-Verzeichnis Win32.tlb ist allerdings nicht enthalten, aber im Internet an zahlreichen Stellen verfügbar. Es war auch auf einigen Windows-CDs enthalten.
    Hier kopiere ich den Code-Inhalt von Form1.frm hin:
    Form1.frm 'um TopLevel-Fenster zu finden, einfach als
    'hParentWnd GetDesktopWindow übergeben

    Private Function GetWnd(WndClass As String, CaptionStart _
            As String, hParentWnd As Long) As Long
    Dim hWnd As Long
      hWnd = GetWindow(hParentWnd, GW_CHILD)
      Do
        If WndClass = GetClassName(hWnd) Then
          If CaptionStart = Left$(GetWindowText(hWnd), _
               Len(CaptionStart)) Then GoTo Found
        End If
        hWnd = GetWindow(hWnd, GW_HWNDNEXT)
      Loop Until hWnd = 0
      Exit Function
    Found:
      GetWnd = hWnd
    End Function

    Function GetWindowText(ByVal hWnd As Long) As String
      Dim Length As Long
      Length = GetWindowTextLength(hWnd)

      'Some windows return huge length
      If Length And &HFFFFF000 Then Exit Function 'Not 4095
      GetWindowText = String$(Length, 0)
      Win32.GetWindowText hWnd, GetWindowText, Length + 1
    End Function

    Function GetClassName(ByVal hWnd As Long) As String
      Dim NameLen As Long
      GetClassName = String$(80, 0)
      NameLen = Win32.GetClassName(hWnd, GetClassName, 80)
      GetClassName = Left$(GetClassName, NameLen)
    End Function

    'gibt auch False zurück, wenn keine CD in ein Laufwerk
    'eingelegt ist (z.B. mit FileExists("F:") )
    'Bei Netzwerk-Pfaden wird auch False zurückgegeben,
    'wenn sie offline sind, selbst wenn Open sie öffnet
    Private Function FileExists(ByVal Filename As String) As Boolean
    Dim hSearch As Long, FD As WIN32_FIND_DATA
      If Len(Filename) <= 3 And Mid$(Filename, 2, 1) = ":" Then _
            Filename = AddSlash(Filename) & "nul"
      If Right$(Filename, 1) = "\" Then Filename = Filename & "nul"
      hSearch = FindFirstFile(Filename, FD)
      FindClose hSearch
      FileExists = hSearch <> 0 And hSearch <> -1
    End Function

    Function AddSlash(Path As String) As String
      If VBA.Right$(Path, 1) <> "\" Then
        AddSlash = Path & "\"
      Else
        AddSlash = Path
      End If
    End Function

    Private Sub Command1_Click()
      Unload Me
    End Sub

    Private Sub StartHost()
      ChDrive App.Path: ChDir App.Path
      If Not FileExists("ipsecdialer.exe") Then ChDir ".."
      If Not FileExists("ipsecdialer.exe") Then _
            MsgBox "ipsecdialer.exe not found. It should be in the " & _
            "same directory as this program.", vbExclamation: Exit Sub
      Shell "ipsecdialer.exe"
      Sleep 2000
    End Sub

    Private Sub Form_Load()
      If App.PrevInstance Then End
      If Command$ = "" Then
        Label = "Auto Login for Cisco System VPN Client" & vbCrLf _
               & vbCrLf & "Usage: " & App.Path & App.EXEName _
               & ".exe Username Password"
        Textbox = Label
        Label.Move Textbox.Left, Textbox.Top
        Textbox.Height = Label.Height
        Textbox.Width = Label.Width
        Width = (Width - ScaleWidth + Textbox.Left * 2 _
               + Textbox.Width)
        Command1.Left = (ScaleWidth - Command1.Width) \ 2
      Else
        Dim hMainWnd As Long, hLogonWnd As Long
        Dim StartTime As Single
        StartTime = Timer
        Do
          hMainWnd = GetWnd("QWidget", "status", GetDesktopWindow)
          If hMainWnd = 0 Then StartHost
        Loop Until hMainWnd <> 0
        If Left$(GetWindowText(hMainWnd), 17) = _
               "status: Connected" Then
          ShowWindow hMainWnd, SW_HIDE
          End
        End If
        ShowWindow hMainWnd, SW_SHOW
        On Error GoTo WindowNotVisible
        If Abs(Timer - StartTime) > 6 Then _
               End 'Timed out at finding main window.
        AppActivate GetWindowText(hMainWnd), False
        On Error GoTo UnexpectedError
        SendKeys "^o", True
        Dim i As Long
        Do
          DoEvents
          DoEvents
          hLogonWnd = GetWnd("QWidget", "VPN Client  |  " & _
               "User Authen", GetDesktopWindow)
          If Abs(Timer - StartTime) > 9 Then _
               End 'Timed out at finding logon window.
        Loop While hLogonWnd = 0

        ShowWindow hLogonWnd, SW_SHOW
        AppActivate GetWindowText(hLogonWnd), False
        DoEvents
        SendKeys Replace(Command$, " ", "{TAB}") & "{ENTER}", True
        End
      End If
      Exit Sub
    WindowNotVisible:
      MsgBox "NotVisible: hMainWnd: " & hMainWnd
      StartHost
      Resume
      Exit Sub

    UnexpectedError:
      MsgBox Err.Description, vbExclamation
      Exit Sub
    End Sub

  4. Disclaimer
    Ich bin für Schäden, die bei der Benutzung oder Nichtbenutzung von meinem VPNClientAutoLogin auftreten nicht verantwortlich, du handelst auf eigene Gefahr. Ich habe keine Ahnung, was dieses Programm noch alles tun kann, abgesehen von dem, was in diesem kleinen Text steht.


VPNClientAutoLoginDownload

VPNClientAutoLogin.zip (10 KB): ZIP-Datei mit EXE-Datei und Visual Basic 6-Source-Code.
Das Programm benötigt einige DLLs, die allerdings nicht dabei sind und im Netz unter VB6-Runtime zu finden sind.