Recuperare l’indirizzo IP del client all’interno di una sessione

E’ passato veramente tanto tempo dall’ultimo post! Nel frattempo sono successe tantissime cose (pandemia a parte) e si sono avvicendate moltissime novità in ambito tecnologico. Quest’oggi volevo riprendere affrontando una necessità che recentemente mi si è presentata più volte: come recuperare l’indirizzo IP del client (ed eventualmente altri dati) che stiamo utilizzando per collegarci ad un ambiente VDI, sia single session, sia multisession.

La prima soluzione che mi è venuta in mente è quella di utilizzare una semplice query WMI:

Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect

Il primo problema è che se stiamo lavorando su una macchina multisessione, l’output di questo comando contiene i dettagli di tutte le sessioni utente. Occorre quindi applicare un filtro per selezionare solo il nostro utente:

Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect | ?{$_.UserName -eq $env:UserName}

L’output di questo comando risulta così:

Come potete vedere nel campo ClientMachineIP abbiamo il nostro indirizzo…. ehm, non proprio. Se abbiamo più schede con indirizzi diversi (per esempio abbiamo installato client VPN, virtualizzatori come VirtualBox o VMWare Player/Workstation) l’indirizzo che vediamo qui potrebbe non essere quello correto.

Facendo un po’ di ricerca in più possiamo facilmente scoprire che i dati della nostra sessione sono in una chiave di registry, in particolare sotto HKLM:\SOFTWARE\Citrix\Ica\Session\<sessione>\Connection . Chiaramente <sessione> va sostituito con il numero della nostra sessione, che varia ad ogni connessione e che possiamo vedere banalmente con il comando quser. In realtà anche la query WMI di prima ha una bellissima riga che inizia con SessionID!

In questo modo il gioco è fatto: dalla query WMI possimo ottenere la SessionID

$w = Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect | ?{$_.UserName -eq $env:UserName}

…possiamo inserirla nel path corretto…

$path = “HKLM:\SOFTWARE\Citrix\Ica\Session\$($w.SessionID)\Connection”

…e così andare a leggere la chiave completa…

$k = Get-ItemProperty -Path $path

A questo punto possiamo leggere il valore, questa volta l’IP corretto da cui ci siamo collegati:

$k.ClientAddress

Riassumo qui di seguito le poche righe:

$w = Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect | ?{$_.UserName -eq $env:UserName}
$path = “HKLM:\SOFTWARE\Citrix\Ica\Session\$($w.SessionID)\Connection”
$k = Get-ItemProperty -Path $path
$k.ClientAddress

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *