![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) TCP Socket through SSH Tunnel (Port Forwarding)Demonstrates using Chilkat Socket to communicate to a TCP service through an SSH tunnel. This example will connect to an NIST time server and (using the old Time Protocol (RFC 868)), will read the current GMT time. Note: This is not necessarily a recommended means for getting the current date/time. The most commonly used time protocol is the Network Time Protocol (RFC-1305). The intent of this example is to show how TCP communications can occur through an SSH tunnel. Note: This example requires Chilkat v11.0.0 or greater.
LOCAL lnSuccess LOCAL loTunnel LOCAL lcSshHostname LOCAL lnSshPort LOCAL lnMaxWaitMs LOCAL lnUseTls LOCAL loChannel LOCAL lnBigEndian LOCAL loDt LOCAL lnBLocalTime lnSuccess = 0 * This example requires the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. loTunnel = CreateObject('Chilkat.Socket') lcSshHostname = "sftp.example.com" lnSshPort = 22 * Connect to an SSH server and establish the SSH tunnel: lnSuccess = loTunnel.SshOpenTunnel(lcSshHostname,lnSshPort) IF (lnSuccess = 0) THEN ? loTunnel.LastErrorText RELEASE loTunnel CANCEL ENDIF * Authenticate with the SSH server via a login/password * or with a public key. * This example demonstrates SSH password authentication. lnSuccess = loTunnel.SshAuthenticatePw("mySshLogin","mySshPassword") IF (lnSuccess = 0) THEN ? loTunnel.LastErrorText RELEASE loTunnel CANCEL ENDIF * OK, the SSH tunnel is setup. Now open a channel within the tunnel. * Once the channel is obtained, the Socket API may * be used exactly the same as usual, except all communications * are sent through the channel in the SSH tunnel. * Any number of channels may be created from the same SSH tunnel. * Multiple channels may coexist at the same time. * Connect to an NIST time server and read the current date/time lnMaxWaitMs = 4000 lnUseTls = 0 loChannel = CreateObject('Chilkat.Socket') lnSuccess = loTunnel.SshNewChannel("time-c.nist.gov",37,lnUseTls,lnMaxWaitMs,loChannel) IF (lnSuccess = 0) THEN ? loTunnel.LastErrorText RELEASE loTunnel RELEASE loChannel CANCEL ENDIF * The time server will send a big-endian 32-bit integer representing * the number of seconds since since 00:00 (midnight) 1 January 1900 GMT. * The ReceiveInt32 method will receive a 4-byte integer, but returns * 1 or 0 to indicate success. If successful, the integer * is obtained via the ReceivedInt property. lnBigEndian = 1 lnSuccess = loChannel.ReceiveInt32(lnBigEndian) IF (lnSuccess = 0) THEN ? loChannel.LastErrorText RELEASE loTunnel RELEASE loChannel CANCEL ENDIF loDt = CreateObject('Chilkat.CkDateTime') loDt.SetFromNtpTime(loChannel.ReceivedInt) * Show the current local date/time lnBLocalTime = 1 ? "Current local date/time: " + loDt.GetAsRfc822(lnBLocalTime) * Close the SSH channel. lnSuccess = loChannel.Close(lnMaxWaitMs) IF (lnSuccess <> 1) THEN ? loChannel.LastErrorText RELEASE loTunnel RELEASE loChannel RELEASE loDt CANCEL ENDIF * It is possible to create a new channel from the existing SSH tunnel for the next connection: * Any number of channels may be created from the same SSH tunnel. * Multiple channels may coexist at the same time. lnSuccess = loTunnel.SshNewChannel("time-a.nist.gov",37,lnUseTls,lnMaxWaitMs,loChannel) IF (lnSuccess = 0) THEN ? loTunnel.LastErrorText RELEASE loTunnel RELEASE loChannel RELEASE loDt CANCEL ENDIF * Review the LastErrorText to see that the connection was made via the SSH tunnel: ? loTunnel.LastErrorText * Close the connection to time-a.nist.gov. This is actually closing our channel * within the SSH tunnel, but keeps the tunnel open for the next port-forwarded connection. lnSuccess = loChannel.Close(lnMaxWaitMs) IF (lnSuccess <> 1) THEN ? loChannel.LastErrorText RELEASE loTunnel RELEASE loChannel RELEASE loDt CANCEL ENDIF * Finally, close the SSH tunnel. lnSuccess = loTunnel.SshCloseTunnel() IF (lnSuccess = 0) THEN ? loTunnel.LastErrorText RELEASE loTunnel RELEASE loChannel RELEASE loDt CANCEL ENDIF ? "TCP SSH tunneling example completed." RELEASE loTunnel RELEASE loChannel RELEASE loDt |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.