JDsVNC (SC over SSH tunnel)

SC<->proxy<->Repeater<->proxy<->viewer

JDsVNC (SC over SSH tunnel)

Postby JDaus » 2007-04-05 01:55

Hi all ...

I created a small AutoIT script/program that creates a SSH tunnel to my server.

I created the first few versions, then a friend (budg) joined in, and neatened up everything, and added many MANY more features.

Current program:
    Creates a menu to select the viewer to create the SSH tunnel to. (dropdown list)
    IF none selection is chosen, IP and port can be entered manually.
    SSH is done using porta plink/putty (not portable putty - untested).
    plink window is started hidden. (autoit magic)
    VNC is not started till SSH tunnel established (port checking done)
    Automatically reconnects if connection dropped (can only cancel for 30 seconds after connection established)

to-do/wish list:
    ping & Port checking on target machine, removing dead connections from the list.
    possible re-write in C++ to enable multiple platform use (to run on linux / MAC)
    Windows Vista support


Code: Select all
; ***************************************************************************
; *   JDs VNC GUI V1.0                                                      *
; *   Copyright (C) 2007 by Budgie & JD                                     *
; *   budgie05@gmail.com                                                    *
; *                                                                         *
; *   This program is free software; you can redistribute it and/or modify  *
; *   it under the terms of the GNU General Public License as published by  *
; *   the Free Software Foundation; either version 2 of the License, or     *
; *   (at your option) any later version.                                   *
; *                                                                         *
; *   This program is distributed in the hope that it will be useful,       *
; *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
; *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
; *   GNU General Public License for more details.                          *
; *                                                                         *
; *   You should have received a copy of the GNU General Public License     *
; *   along with this program; if not, write to the                         *
; *   Free Software Foundation, Inc.,                                       *
; *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
;****************************************************************************

#include <GuiConstants.au3>
;Setup the EXE names and tunnel command lines globally for simplicity
Global $VNC = "jdswinvnc.exe"
Global $Plink = "jdsplink.exe"
Global $budg = $Plink & " -pw XXXXXXXX -batch -C -L 25501:127.0.0.1:5500 testuser@budg.nowhere -P 22"
Global $jd = $Plink & " -pw XXXXXX -batch -C -L 25501:127.0.0.1:5501 testuser@jd.nowhere -P 22"

Func JDsVNCGUI()

$looplock = 1

GuiCreate("JDsVNC", 200, 150)

GUISetIcon ("icon1.ico")

  $tcpipitem = GuiCtrlCreateInput( "127.0.0.1", 60, 10, 120, 20, $ES_READONLY )
  $portitem = GuiCtrlCreateInput("25501", 60, 30, 120, 20, $ES_READONLY )

  $comboitem = GuiCtrlCreatecombo("JD", 10, 80, 180, 90)
  $comboitem1 = GUICtrlSetData(-1,"Budg|None","")

  GuiCtrlCreateLabel("Select SSH Tunnel to Connect to:", 10, 55, 180, 20)
  GuiCtrlCreateLabel("TCP/IP", 10, 10, 40, 20)
  GuiCtrlCreateLabel("PORT", 10, 30, 40, 20)

  $subitem = GuiCtrlCreateButton("Connect", 10, 110, 80, 20)
  $canitem = GuiCtrlCreateButton("Cancel", 100, 110, 80, 20)

GUISetState ()

$msg = 0
While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()
 
  If GUICtrlRead($comboitem) = "jd" or GUICtrlRead($comboitem) = "budg" and $looplock = 0 Then
   GUICtrlDelete($tcpipitem)
   GUICtrlDelete($portitem)
   $tcpipitem = GuiCtrlCreateInput( "127.0.0.1", 60, 10, 120, 20, $ES_READONLY )
   $portitem = GuiCtrlCreateInput("25501", 60, 30, 120, 20, $ES_READONLY )
   GUISetState ()
   $looplock = 1
  EndIf

  If GUICtrlRead($comboitem) = "none" and $looplock = 1 Then
   GUICtrlDelete($tcpipitem)
   GUICtrlDelete($portitem)
   $tcpipitem = GuiCtrlCreateInput( "127.0.0.1", 60, 10, 120, 20)
   $portitem = GuiCtrlCreateInput("25501", 60, 30, 120, 20)
   GUISetState ()
   $looplock = 0
  EndIf
 
        Select
            Case $msg = $subitem
                exitloop
   EndSelect
   
  If $msg = $canitem Or $msg = -3 Or $msg = -1 Then Exit
Wend

Global $JDsVNCTunnel = GUICtrlRead($comboitem)
Global $JDsVNCIP = GUICtrlRead($tcpipitem)
Global $JDsVNCPort = GUICtrlRead($portitem)

ProcessWaitClose($subitem)

GUIDelete()

EndFunc

;=========================================================================================================================================================

Func JDsVNCReconnect()

$loop = 1

While $loop = 1
   $Exit = JDsVNCSSH()
  If $Exit = 2 Then
   $loop = 0
  EndIf
   If $loop = 0 Then
    MsgBox(64, "Finished:", $JDsVNCTunnel & " has finished." & @CRLF & @CRLF & "Your desktop is no longer remotely visible")
   EndIf
WEnd

EndFunc

;=========================================================================================================================================================

Func JDsVNCSSH()

CloseFunc($VNC)

If $JDsVNCTunnel = "jd" or $JDsVNCTunnel = "budg" Then
   
  $port = CheckPort()
   
  if $port = -1 then
   
  CloseFunc($Plink)

   if $JDsVNCTunnel = "jd" Then
    RunDOSHide($jd)
;    Run($jd)
   elseif $JDsVNCTunnel = "budg" Then
    RunDOSHide($budg)
;    Run($budg)
   EndIf
  EndIf
EndIf

Sleep (5000)

$port = CheckPort()

if $port = -1 then
  MsgBox(64, "Error:","Could not connect to VNC Server or SSH Tunnel at " & $JDsVNCIP & ":"  & $JDsVNCPort & "")
  CloseFunc($VNC)
  CloseFunc($Plink)
  Return 2
EndIf

RunDOSHide ("jdswinvnc.exe -connect" & $JDsVNCIP & ":"  & $JDsVNCPort & " -noregistry")

$JDsVNCStop = MsgBox(65,"JDsVNC Remote access", "You are now Connected to " & $JDsVNCTunnel &"'s Computer," & @CRLF & @CRLF & "Press Cancel now to exit", 30)

If $JDsVNCStop = 2 Then
  WinClose ("jdsWinVNC")
  CloseFunc($Plink)
EndIf
 
ProcessWaitClose($VNC)

Return $JDsVNCStop

EndFunc

;=========================================================================================================================================================

Func RunDOSHide($sCommand)

Return Run(@ComSpec & " /C " & $sCommand, "", @SW_HIDE)

EndFunc

;=========================================================================================================================================================

Func CloseFunc($prog)

$PID = ProcessExists($prog)
If $PID Then ProcessClose($PID)

EndFunc

;=========================================================================================================================================================

Func CheckPort()

TCPStartUp()
$socket = TCPConnect( $JDsVNCIP, $JDsVNCPort )
Return $socket
TCPShutdown ()

EndFunc

;=========================================================================================================================================================

JDsVNCGUI()
JDsVNCReconnect()

Exit


Links
Porta Puttyhttp://socialistsushi.com/portaputty

Files
.putty/sshhostkeys - MUST hold the host key for all machines it is to connect to.
icon1.ico -
icon2.ico -
jdsplink.exe - porta plink (from above URL)
jdswinvnc.exe - UVNC SCII / SCIII
JDsVNC.exe - the compiled script (from above code).

Latest version can always be found at my SVN (http://svn.aus.st)

I will try to provide a tutorial on setting up the program in the near future, with links to setting up OpenSSH on windows.

One thing that you need to do, is make sure plink can connect to the host machine using the command lines at top of script - THIS IS ESSENTUAL

PS. POSITIVE feedback is always welcomed, or suggestions for fututre editions ....

JD
Last edited by JDaus on 2008-09-07 09:51, edited 2 times in total.
ask a silly question and remain a fool for 5 minutes...
don't ask, and remain a fool for life - JDaus 2003

without imperfections, neither you nor i would exist - Steven Hawkins
__
JD
VNC2Me - OpenSource Free Remote Screen\Desktop Sharing Solutions
SecureTech
JDaus
Friend of UVNC
Friend of UVNC
 
Posts: 516
Joined: 2007-03-17 11:00
Location: Sydney, Australia

Re: JDsVNC (SC over SSH tunnel)

Postby JDaus » 2008-09-07 09:49

This script has been outdated by vnc2me ... http://vnc2me.org[/i]
ask a silly question and remain a fool for 5 minutes...
don't ask, and remain a fool for life - JDaus 2003

without imperfections, neither you nor i would exist - Steven Hawkins
__
JD
VNC2Me - OpenSource Free Remote Screen\Desktop Sharing Solutions
SecureTech
JDaus
Friend of UVNC
Friend of UVNC
 
Posts: 516
Joined: 2007-03-17 11:00
Location: Sydney, Australia


Return to SCIII

Who is online

Users browsing this forum: No registered users and 1 guest