Заранее спасибо за ваш совет.
В настоящее время я работаю над программой, которая использует Putty для создания SSH-соединения с сервером, который использует локальную переадресацию портов для включения клиента, на котором запущено мое программное обеспечение,чтобы получить доступ к службе за сервером SSH через localhost.
IE: клиент: 20100 -> Интернет -> Удаленный сервер SSH, доступный через маршрутизатор / брандмауэр -> Локальная интрасеть -> Сервер интрасети Web POP3: 110.
Строка Cmd: "putty -ssh -2 -P 22 -C -L 20100: intranteIP: 110 -pw sshpassword sshusername @ sshserver"
Клиент будет использовать putty для создания соединения SSH сSSH-сервер, указывающий в строке подключения, что он хотел бы связать порт 110 POP3-сервера интрасети с портом 20100 в клиентской системе.Поэтому клиент сможет открыть почтовый клиент для localhost: 20100 и взаимодействовать с внутренним сервером POP3 через туннель SSH.Выше приведено общее описание.Я уже знаю, что то, что я пытаюсь сделать, будет работать без проблем, поэтому я не ищу дебатов по вышеуказанному.
Вопрос заключается в следующем ... Как я могу обеспечить локальный порт (я не могу использовать динамические порты, поэтому он должен быть статическим) на локальном хосте не используется или не прослушивается никаким другим приложением?
В настоящее время я выполняю этот код в своем приложении на C #:
private bool checkPort(int port)
{
try
{
//Create a socket on the current IPv4 address
Socket TestSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Create an IP end point
IPEndPoint localIP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
// Bind that port
TestSocket.Bind(localIP);
// Cleanup
TestSocket.Close();
return false;
}
catch (Exception e)
{
// Exception occurred. Port is already bound.
return true;
}
}
Я сейчас нахожусьвызывая эту функцию, начиная с определенного порта в цикле for, чтобы получить «ложное» возвращение на первом доступном порту.Первый порт, который я пробую, фактически прослушивается uTorrent.Приведенный выше код не улавливает это, и мое соединение не устанавливается.
Каков наилучший способ обеспечить свободный доступ к порту?Я понимаю, что некоторые другие программы могут захватить порт во время / после того, как я проверил его.Мне просто нужно найти что-то, что гарантирует, что он не используется в данный момент при выполнении теста.
Если есть способ действительно зарезервировать порт localhost во время теста, я хотел бы услышать оэто.