[THIN] Re: Get Client IP Address

  • From: Matt Kosht <matt.kosht@xxxxxxxxx>
  • To: thin@xxxxxxxxxxxxx
  • Date: Mon, 12 Dec 2005 14:45:08 -0500

Sorry that won't work for the ICA/RDP client IP.  My apologies.  I
will read more carefully next time.

On 12/12/05, Matt Kosht <matt.kosht@xxxxxxxxx> wrote:
> I have used this perl script before.
> you could run the script when the user logs in.
> -Matt
>
>
> #   GetIP.pl
> #   --------
> #   This will retrieve all IP Addresses that are bound
> #   to network devices on a specified machine. This includes IPs that are
> #   bound to any NIC (network card, RAS dail up, etc).
> #   If a particular NIC specifies 0.0.0.0 (typically to indicate that the
> #   NIC will request an IP via DHCP, PPP, etc) it will be ignored.
> #   ALL IPs are discovered even on cards that are disabled.
> #
> #   Syntax:
> #       perl GetIP.pl [Machine Name]
> #
> #   Examples:
> #       perl GetIP.pl
> #       perl GetIP.pl \\server
> #
> #   1999.03.09  roth
> #
> #   Permission is granted to redistribute and modify this code as long as
> #   the below copyright is included.
> #
> #   Copyright (c) 1999 by Dave Roth
> #   Courtesty of Roth Consulting
> #   http://www.roth.net/
>
> use Win32::Registry;
>
> %KeyName = (
>     serviceroot         =>  'System\CurrentControlSet\Services',
>     tcplink             =>  'Tcpip\Linkage',
>     tcplink_disabled    =>  'Tcpip\Linkage\Disabled',
>     tcpparam            =>  'Tcpip\Parameters',
>     deviceparam_tcp     =>  'Parameters\Tcpip',
>
> );
>
> $Root = $HKEY_LOCAL_MACHINE;
>
> if( $Machine = $ARGV[0] )
> {
>     $HKEY_LOCAL_MACHINE->Connect( $Machine, $Root ) || die "Could not
> connect to the registry on '$Machine'\n";
> }
>
> if( $Root->Open( $KeyName{serviceroot}, $ServiceRoot ) )
> {
>     # Get the device names of the cards tcp is bound to...
>     if( $ServiceRoot->Open( $KeyName{tcplink}, $Links ) )
>     {
>         my( $Data );
>         if( $Links->QueryValueEx( "Bind", $DataType, $Data ) )
>         {
>             $Data =~ s/\n/ /gs;
>             $Data =~ s/\\Device\\//gis;
>             $Data =~ s/^\s+(.*)\s+$/$1/gs;
>             push( @Devices, ( split( /\c@/, $Data ) ) );
>         }
>         $Links->Close();
>     }
>
>     # Get the device names of cards that tcp is bound to but disabled...
>     if( $ServiceRoot->Open( $KeyName{tcplink_disabled}, $Links ) )
>     {
>         my( $Data );
>
>         if( $Links->QueryValueEx( "Bind", $DataType, $Data ) )
>         {
>             $Data =~ s/\s+//gs;
>             $Data =~ s/\\Device\\//gis;
>             push( @Devices, ( split( /\c@/, $Data ) ) );
>         }
>         $Links->Close();
>     }
>
>     foreach $DeviceName ( @Devices )
>     {
>         my( $DeviceTCPKey );
>         if( $ServiceRoot->Open(
> "$DeviceName\\$KeyName{deviceparam_tcp}", $DeviceTCPKey ) )
>         {
>             my( @CardIPs, @CardSubNets );
>             my( $Data, $iCount, $IPAddress );
>
>             # Get the IP addresses...
>             if( $DeviceTCPKey->QueryValueEx( "IPAddress", $DataType, $Data ) )
>             {
>                 $Data =~ s/\s+//gm;
>                 push( @CardIPs, ( split( /\c@/, $Data ) ) );
>             }
>
>             # Get the Subnet masks...
>             if( $DeviceTCPKey->QueryValueEx( "SubnetMask", $DataType, $Data ) 
> )
>             {
>                 $Data =~ s/\s+//gm;
>                 push( @CardSubNets, ( split( /\c@/, $Data ) ) );
>             }
>
>             # Push our new found data onto the stack...
>             $iCount = 0;
>             map
>             {
>                 my( %Hash );
>
>                 # We don't want 0.0.0.0 since it means the IP will be
> procured via DHCP or something...
>                 next if( $_ eq '0.0.0.0' );
>
>                 $Hash{ip} = $_;
>                 $Hash{subnet} = $CardSubNets[$iCount];
>                 push( @IP, \%Hash );
>                 $iCount++;
>             } ( @CardIPs );
>
>             $DeviceTCPKey->Close();
>         }
>     }
>
>     print "This machine $Machine has the following IP addresses:\n";
>
>     foreach $IPStruct ( @IP )
>     {
>         print "\t$IPStruct->{ip} \t(subnet: $IPStruct->{subnet})\n";
>     }
>
>     $ServiceRoot->Close();
> }
>
>
>
> On 12/12/05, Jeremy Saunders <jeremy.saunders@xxxxxxxxxxx> wrote:
> > Hi All,
> >
> > Is there a way to get the client IP address from within an ICA and RDP
> > session? I think you can do it via the MFCOM object for ICA, but not sure
> > if this will work within an RDP session.
> >
> > Has anyone done this before?
> >
> > Cheers.
> >
> >  Kind regards,
> >
> >  Jeremy Saunders
> >  Senior Technical Specialist
> >
> >  Integrated Technology Services &
> >  Cerulean
> >  IBM Australia
> >  Level 2, 1060 Hay Street
> >  West Perth WA 6005
> >
> >  Visit us at
> >  http://www.ibm.com/services/au/its
> >
> >  P: +61 8 9261 8412                F: +61 8 9261 8486
> >  M: TBA                            E-mail:
> >                                     jeremy.saunders@xxxxxxxxxxx
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ************************************************
> > For Archives, RSS, to Unsubscribe, Subscribe or
> > set Digest or Vacation mode use the below link:
> > //www.freelists.org/list/thin
> > ************************************************
> >
>
************************************************
For Archives, RSS, to Unsubscribe, Subscribe or
set Digest or Vacation mode use the below link:
//www.freelists.org/list/thin
************************************************

Other related posts: