Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(AutoIt) TCP or TLS over Multiple Hop SSH to Remote ServerDemonstrates how to use the Chilkat Socket API to connect to a remote server (using TCP or TLS) tunneled through mulitple-hop SSH. The scheme looks like this: Application => ServerSSH1 => ServerSSH2 => DestinationServer The ConnectThroughSsh and UseSsh methods are added in Chilkat version 9.5.0.55 to accomplish this task.
; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. $oSsh1 = ObjCreate("Chilkat.Ssh") ; Connect directly to the 1st SSH server. Local $bSuccess = $oSsh1.Connect("serverssh1.com",22) If ($bSuccess <> True) Then ConsoleWrite($oSsh1.LastErrorText & @CRLF) Exit EndIf ; Authenticate using login/password: $bSuccess = $oSsh1.AuthenticatePw("ssh1Login","ssh1Password") If ($bSuccess <> True) Then ConsoleWrite($oSsh1.LastErrorText & @CRLF) Exit EndIf ; Connect through the 1st SSH connection to reach a 2nd SSH server. ; Note: Any number of SSH connections may be simultaneously tunneled through a single ; existing SSH connection. $oSsh2 = ObjCreate("Chilkat.Ssh") $bSuccess = $oSsh2.ConnectThroughSsh($oSsh1,"serverssh2.com",22) If ($bSuccess <> True) Then ConsoleWrite($oSsh2.LastErrorText & @CRLF) Exit EndIf ; Authenticate with ssh2... $bSuccess = $oSsh2.AuthenticatePw("ssh2Login","ssh2Password") If ($bSuccess <> True) Then ConsoleWrite($oSsh2.LastErrorText & @CRLF) Exit EndIf $oSocket = ObjCreate("Chilkat.Socket") ; Tell the socket object to connect to our destination server though the ssh2 tunnel (which itself is routed through ssh1). ; The connection looks like this: ApplicationSocket(TLS) => ServerSSH1 => ServerSSH2 => DestinationServer $bSuccess = $oSocket.UseSsh($oSsh2) If ($bSuccess <> True) Then ConsoleWrite($oSocket.LastErrorText & @CRLF) Exit EndIf ; Connect using TLS to www.chilkatsoft.com ; We could also tunnel a bare TCP connection by specifying port 80 with useTls = False. Local $bUseTls = True Local $iMaxWaitMillisec = 20000 $bSuccess = $oSocket.Connect("www.chilkatsoft.com",443,$bUseTls,$iMaxWaitMillisec) If ($bSuccess <> True) Then ConsoleWrite($oSocket.LastErrorText & @CRLF) Exit EndIf ; Once the multiple hop SSH tunneled connection is setup, the socket programming ; is identical to the normal case where we have a direct connection. ; Tell the socket object that all text is to be sent in the utf-8 encoding, ; and the text received is assumed to be utf-8. $oSocket.StringCharset = "utf-8" ; Send an HTTP HEAD request: $bSuccess = $oSocket.SendString("HEAD / HTTP/1.1" & @CRLF & "Host: www.chilkatsoft.com" & @CRLF & @CRLF) If ($bSuccess <> True) Then ConsoleWrite($oSocket.LastErrorText & @CRLF) Exit EndIf ; Wait a maximum of 4 seconds while no data is forthcoming: $oSocket.MaxReadIdleMs = 4000 ; Get the 1st response line, which should be "HTTP/1.1 200 OK" Local $sResponseStatusLine = $oSocket.ReceiveToCRLF() If ($oSocket.LastMethodSuccess <> True) Then ConsoleWrite($oSocket.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("StatusLine: " & $sResponseStatusLine & @CRLF) ; Now get the 1st line of the response header: Local $sResponseHeaderLine = $oSocket.ReceiveToCRLF() If ($oSocket.LastMethodSuccess <> True) Then ConsoleWrite($oSocket.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("HeaderLine: " & $sResponseHeaderLine & @CRLF) ; Now read the remainder of the response header by reading until a double CRLF is seen: Local $sRemainderOfHeader = $oSocket.ReceiveUntilMatch(@CRLF & @CRLF) If ($oSocket.LastMethodSuccess <> True) Then ConsoleWrite($oSocket.LastErrorText & @CRLF) Exit EndIf ConsoleWrite("Remainder: " & $sRemainderOfHeader & @CRLF) ; Close the connection with the server. This closes the tunnel through ssh2. ; Wait a max of 20 seconds (20000 millsec) $bSuccess = $oSocket.Close(20000) ; Close the connection with ssh2. (This closes the the tunnel through ssh1.) ; The connection with ssh1 is still alive, and may be used for more connections. $oSsh2.Disconnect $oSsh1.Disconnect |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.