Я пишу программу туннелирования SSH на С # для объединения динамического туннелирования в единую программу, вместо того, чтобы использовать плагин putty + firefox socks4 / chrome socks4, вводя тот же user / pass..ect. Он использует библиотеку Renci.SSHNet.
Мой вопрос таков: когда я создаю новый объект SshClient, я хочу иметь возможность убить это соединение позже с помощью кнопки уничтожения соединения, а также иметь возможность запускать отдельный поток, который говорит while (isConnected) if (! AddedToList) addtolist .. Проблема в том, что я не уверен, как получить доступ к различным одновременно работающим объектам sshClient. Скажем, у меня есть 3 открытых подключения к разным хостам. Если я выберу IP-адрес хоста из текущих подключений, мне понадобится способ подключить этот IP-адрес к соединениям SshCLient, а затем запустить sshClient.Disconnect (). Я понимаю, что вы можете использовать sshClient.ConnectionInfo.Host.ToString () и сопоставить строку с этим, но опять же, если я использую другой метод (нажата кнопка отключения соединения), я не знаю, как сопоставить IP-адрес хоста 192.168.0. 1.1 к sshClient, который подключен к этому хосту.
Я изучил слабые ссылки, но, похоже, это работает только в том случае, если у меня был только один sshClient. Если бы существовал способ доступа к созданным в данный момент объектам SshClient, а затем сопоставьте его со свойством Host ip, это сработает. Я не могу найти это в гугле.
Я подумал о разработке какого-нибудь сложного способа создания переменной частного объекта SshClients, названной в честь deviceIpString, но не знал, как создать переменную, названную в честь содержимого другой переменной (String). Такие как:
deviceIpString = 192.168.1.1;
(i am pretending that backticks access the variable's data, since I dont know how to do it)
private SshClient 'deviceIpString' = new (SshClient(arguments));