Whither system was developed to allow one public Internal server port to be relayed to any one of a team of 'worker' hosts, so that processing load could be distributed and, where these services are interactive, multiple connections could be used simultaneously. Originally, this was used with a listening VNC viewer setup, where three listening viewers were exposed through a single standard port, and unrelated incoming connections would appear on different viewer machines where possible.
The system is installed in two parts:
A third, optional, program called Thither can be installed on client computers to listen for connection requests posted by the Whither server, and run a command line in response. This might be used to automatically, remotely start reverse connections when it is not possible to connect directly. Note that it cannot run arbitrary commands: the client user is in full control of whether and what commands are run.
To install, run it on the server machine with administrative rights and the /INSTALL command line argument. It should then appear in the Services Manager, from where it can be started and/or configured to run automatically. By default, it will use a configuration file called WhitherConfig.txt in the system's ProgramData directory. A basic sample configuration is shown below.
Hither is a standalone program and can be run from any location. The first time it is run on one of the workers, right-click its notification area icon, and click Change Server. Specify the name and private port number of the Whither server, and the worker name for this host, and click OK. These settings are stored in the registry, so Hither can then be run again in the future from any folder.
object TWhitherServer PrivatePort = 2323 CallsPath = 'C:\inetpub\wwwroot\whither' object Someone: TClient IPMask4 = '123.45.67.*' end object Self: TClient IPMask6 = '0:0:0:0:0:0:0:1' end object Telnet: TServicePort Port = 23 TCP = True end object Test1: TWorker MaxConnections = 0 Ports = < item Tag = 23 ObjRef = Telnet end> end object Test2: TWorker MaxConnections = 3 Ports = < item Tag = 23 ObjRef = Telnet end> end end