
Ein SOCKS-Proxy für Citrix.
Ica2Tcp ist ein in C entwickeltes Tool, mit dem sich beliebige TCP-Verbindungen innerhalb einer Citrix-ICA-Verbindung über einen Proxy leiten lassen. Es ist für Citrix das, was ssh -D für SSH ist.
Weitere Informationen finden Sie hier: https://www.sstic.org/2022/presentation/ica2tcp/
Dieses Tool wurde als Praktikumsprojekt entwickelt und befindet sich noch in der Entwicklung. Es wird „so, wie es ist“ veröffentlicht, daher sind einige Teile des Codes noch etwas unsauber. Es kann also gelegentlich zu Abstürzen kommen. Eine bereinigte Version ist in Arbeit und wird bald veröffentlicht. Anmerkungen zu dieser Version sind jedoch willkommen!
Sowohl die eigenständige Binärdatei für die Serverseite als auch die Shared Library des Clients müssen erstellt werden. Weitere Einzelheiten finden Sie in der jeweiligen README:
Der Einfachheit halber sind alle erforderlichen Citrix-Header und -Bibliotheken (für den Linux64-Client und Win32-Server) in diesem Repository enthalten (in citrix_sdk_files/). Sie stammen alle aus dem Virtual Channel SDK und dem WFAPI SDK, die öffentlich verfügbar sind:
Die CMakeLists.txt-Dateien in diesem Repository ermöglichen das Erstellen der Server- und Client-Binärdateien mit diesen enthaltenen Dateien. Wenn Sie die neuesten SDK-Dateien verwenden oder für eine andere Zielarchitektur erstellen möchten, können Sie die SDKs gerne manuell herunterladen und installieren. Möglicherweise müssen Sie jedoch das entsprechende CMakeLists.txt ändern.
Sobald alles erstellt ist, müssen Sie die Shared Library des Clients installieren.
Kopieren Sie zunächst die Build-Ausgabedatei DRIVER.DLL nach <CITRIX_INSTALL_FOLER>/ICAClient/<DRIVER_NAME>.DLL.
Ändern Sie dann die Konfigurationsdatei <CITRIX_INSTALL_FOLER>/ICAClient/config/module.ini wie folgt:
<VIRTUAL_DRIVER_NAME> in der VirtualDriver-Liste im Abschnitt [ICA 3.0] hinzu (ersetzen Sie <VIRTUAL_DRIVER_NAME> durch einen beliebigen Namen).[ICA 3.0] die Zeile <VIRTUAL_DRIVER_NAME>=On hinzu.[<VIRTUAL_DRIVER_NAME>] mit folgendem Inhalt hinzu: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
Das ist alles!
Sobald der clientseitige Treiber korrekt installiert ist, müssen Sie lediglich die Server-Binärdatei auf den Server kopieren und sie aus einer aktiven ICA-Sitzung heraus ausführen.
Auf der Clientseite wird ein SOCKS-Dienst unter der in der Datei module.ini angegebenen Adresse und dem angegebenen Port geöffnet.