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) SSH Tunnel (Port Forwarding via direct-tcpip channel)Demonstrates how to create an SSH tunnel to a remote hostname:port via a direct-tcpip channel.
; This example assumes the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. $oSsh = ObjCreate("Chilkat.Ssh") ; Connect to an SSH server: Local $sHostname Local $iPort ; Hostname may be an IP address or hostname: $sHostname = "192.168.1.117" $iPort = 22 Local $bSuccess = $oSsh.Connect($sHostname,$iPort) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Wait a max of 5 seconds when reading responses.. $oSsh.IdleTimeoutMs = 5000 ; Authenticate using login/password: $bSuccess = $oSsh.AuthenticatePw("chilkat","myPassword") If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Open a direct-tcpip channel. We want the SSH server to connect ; to www.chilkatsoft.com, port 80 (i.e. the web server). ; Data sent through the SSH tunnel is forwarded to the remote ; host:port. (Note: The remote host:port does not need to be ; a web server. It can be anything. It can be your own ; customer application server that listens on a port, or any ; other type of server.) ; When we read from the SSH channel, we'll be reading data ; sent from the remote host:port (i.e. the web server in this ; example). Local $iChannelNum $iChannelNum = $oSsh.OpenDirectTcpIpChannel("www.chilkatsoft.com",80) If ($iChannelNum < 0) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Build a simple HTTP GET request for http://www.chilkatsoft.com/xyz.html Local $sHttpReq = "GET /xyz123.html HTTP/1.1" & @CRLF & "Host: www.chilkatsoft.com" & @CRLF & @CRLF ; Send the HTTP request: $bSuccess = $oSsh.ChannelSendString($iChannelNum,$sHttpReq,"ansi") If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Get the HTTP response. ; First read the HTTP response header which ends with a double CRLF. ; Calling ChannelReceiveUntilMatch will receive until match string is seen, ; or until a timeout occurs (IdleTimeoutMs property). ChannelReceiveUntilMatch ; may read beyond the match string, but it will stop reading as soon as the match ; string is seen. Local $bCaseSensitive = False Local $sMatchStr = @CRLF & @CRLF $bSuccess = $oSsh.ChannelReceiveUntilMatch($iChannelNum,$sMatchStr,"ansi",$bCaseSensitive) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Extract the HTTP header from the receive buffer. ; (GetReceiveTextS extracts up to and including the match string from the receive buffer) Local $sResponseHeader $sResponseHeader = $oSsh.GetReceivedTextS($iChannelNum,$sMatchStr,"ansi") ConsoleWrite("---- HTTP Response Header ----" & @CRLF) ConsoleWrite($sResponseHeader & @CRLF) ; Now get the body of the HTTP response (this is the HTML content ; of http://www.chilkatsoft.com/xyz.html ; It's possible we've already received the entire HTTP response in the ; call to ChannelReceiveUntilMatch. Therefore, we'll poll for any remaining data ; and wait a max of .2 seconds. Local $iNumBytesRead Local $iPollTimeoutMs = 200 $iNumBytesRead = $oSsh.ChannelPoll($iChannelNum,$iPollTimeoutMs) ; We're not checking for an error here. ; A return value of -2 means that no data was available and the poll simply timed out (not an error) ; A return value of -1 indicates an error. ; A return value greater than 0 indicates that additional data was received. ConsoleWrite("---- HTML BODY ----" & @CRLF) ; Extract the remainder of the accumulated data in the internal receive buffer. ; This should be our HTML body: Local $sHtmlBody $sHtmlBody = $oSsh.GetReceivedText($iChannelNum,"ansi") ConsoleWrite($sHtmlBody & @CRLF) ; Close the channel: $bSuccess = $oSsh.ChannelSendClose($iChannelNum) If ($bSuccess <> True) Then ConsoleWrite($oSsh.LastErrorText & @CRLF) Exit EndIf ; Disconnect $oSsh.Disconnect |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.