
Прокси SOCKS для Citrix.
Ica2Tcp — это инструмент, разработанный на C, который позволяет проксировать любое TCP-соединение внутри соединения Citrix ICA. Для Citrix он является тем же, чем ssh -D является для SSH. Дополнительную информацию можно найти здесь: https://www.sstic.org/2022/presentation/ica2tcp/
Этот инструмент был разработан в рамках стажировки и всё ещё находится в разработке. Он публикуется «как есть», поэтому некоторые части кода всё ещё немного грязные. Таким образом, вы можете столкнуться с периодическими сбоями. Более чистая версия находится в разработке и будет выпущена в ближайшее время. Тем не менее, любые замечания по поводу этой версии приветствуются!
Необходимо собрать как автономный бинарный файл серверной стороны, так и разделяемую библиотеку клиентской стороны. Подробнее см. в соответствующем README:
Для удобства все необходимые заголовочные файлы и библиотеки Citrix (для клиента Linux64 и сервера Win32) включены в этот репозиторий (в citrix_sdk_files/). Все они взяты из Virtual Channel SDK и WFAPI SDK, которые находятся в открытом доступе:
Файлы CMakeLists.txt в этом репозитории позволяют собрать серверные и клиентские бинарные файлы с использованием этих включённых файлов. Если вы хотите использовать последние файлы SDK или собрать проект для другой целевой архитектуры, вы можете вручную загрузить и установить SDK, однако, возможно, вам придётся изменить соответствующие файлы CMakeLists.txt.
После того как всё собрано, необходимо установить клиентскую разделяемую библиотеку.
Сначала скопируйте выходной файл сборки DRIVER.DLL в <CITRIX_INSTALL_FOLER>/ICAClient/<DRIVER_NAME>.DLL
Затем измените файл конфигурации <CITRIX_INSTALL_FOLER>/ICAClient/config/module.ini следующим образом:
<VIRTUAL_DRIVER_NAME> в список VirtualDriver в секции [ICA 3.0] (замените <VIRTUAL_DRIVER_NAME> на любое желаемое значение).[ICA 3.0] добавьте строку <VIRTUAL_DRIVER_NAME>=On[<VIRTUAL_DRIVER_NAME>], содержащую:DriverName = <DRIVER_NAME>.DLL
LogPath = /path/to/logs/folder/
Port = <PORT_NUMBER_FOR_SOCKS> //default: 33556
Address = <LISTENING_IP_ADDRESS> //default: 127.0.0.1, use 0.0.0.0 to open the socks for non local clients
Вот и всё!
После правильной установки клиентского драйвера вам просто нужно скопировать серверный бинарный файл на сервер и выполнить его из активной ICA-сессии.
Он открывает SOCKS-сервис на клиентской стороне по адресу и порту, указанным в файле module.ini.