Have you ever tried to get the Client IP address for a Citrix or
terminal services session and got stuck? I have had several emails
asking me on how to do it. Well I thought I might just blog about it. I
can think four ways to do it and if you can add to the list then please
do via comments. So let's get to the business right away.
Using the code
The simplest way is to use the MFCOM API to get a list of session
and enumerate each session to get username and the Client IP address.
Here is a code snippet.
Set objFarm = CreateObject("MetaFrameCOM.MetaFrameFarm")
For Each objSession In objFarm.Sessions
WScript.Echo "User name : " & objSession.UserName
WScript.Echo "IP Address: " & objSession.ClientAddress
You need to be an admin on XenApp (Formerly known as Presentation Sever) Farm to run MFCOM queries. You can read more and download the MFCOM example here.
2. Use WFAPI SDK WFEnumerateSessions method to get a list of all the
sessions on a server and then use WFQuerySessionInformation to extract
Client IP for each session on the server I have written a Sample
program on how to do it. Follow this link to download WFAPI and Csharp .Net program which enumerates all sessions on a server and their Client IP address.
3. Use native terminal Services API. Similar to WFAPI use
TSEnumerateSessions to get a list of sessions on a server and then use
TSQuerySessionInformation to extract Client IP address each session on
the server. To read more follow this link to download Terminal Services API sample example written in Csharp .Net.
4. You can also use ICO SDK and GetClientAddress API to get client
IP within a ICO session The ICA Client Object is the framework that
exposes the functionality of the Citrix ICA Win32 Client to third
party applications. The ICA Client Object (ICO) SDK enables
developers and administrators to modify the behavior and appearance of
a Windows 32-bit Citrix ICA client. The SDK is a series of documents
that detail available application programming interface (API) in the
Citrix ICA client Follow this link to download an ICO example
which illustrates the use of methods and properties available to
get client network name and IP address information using Citrix ICO SDK.
form.netname.value = document.ICO1.GetClientNetworkName()
form.addrcnt.value = document.ICO1.GetClientAddressCount()
form.addr.value = document.ICO1.GetClientAddress(0)
If you have any questions regarding Citrix MFCOM then drop me a line at my blog