2009-10-02 6 views
5

Ich versuche ein Skript zu schreiben, um die IP-Adresse des Windows-Clients zu protokollieren, von dem aus der Benutzer Remotedesktop anmeldete, um sich beim Windows-Server anzumelden. Wie erfasse ich die IP-Adresse des Clients im Server?Wie bekomme ich die IP-Adresse des Remote Desktop Clients?

+1

Was mehrere Clients kam vom selben Proxy-Server? – Dewfy

+0

Nehmen wir an, es gibt keinen Proxy ;-) – BlueGene

+0

Aus Neugier, wie machst du dein Skript? – chaz

Antwort

5

Also, ignorieren Sie Proxy ...

  • mit Umgebung var: CLIENT in Domäne Sie können es auf IP lösen zurück

ohne Domänencontroller:

  • WMI Skript können Sie zu Ereignisprotokoll, Quelle: Sicherheit, suchen Sie nach Kategorie Anmelden/Abmelden, wo Benutzername = Umgebungsvariable USERNAME
1

Wenn Sie PowerShell oder eine .NET-Sprache verwenden, unterstützt die Stammversion des Cassia library dies - greifen Sie einfach den neuesten Build von der build server (Login als Gast und verwenden Sie die Artefakte-Link). Um die Remote-Adressen aller Sitzungen auf dem lokalen Server zu drucken, können Sie so etwas wie die folgenden verwenden:

ITerminalServicesManager manager = new TerminalServicesManager(); 
foreach (ITerminalServicesSession session in manager.GetLocalServer().GetSessions()) 
{ 
    IPEndPoint ipEndPoint = session.RemoteEndPoint as IPEndPoint; 
    if (ipEndPoint != null) 
    { 
     Console.WriteLine(ipEndPoint.Address); 
    } 
} 
1

Wenn Sie verwenden möchten, „reine“ Powershell 2.0:

$Wtsapi32 = @' 
using System; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace Wtsapi32 { 

    public enum WTS_INFO_CLASS 
    { 
     WTSInitialProgram, 
     WTSApplicationName, 
     WTSWorkingDirectory, 
     WTSOEMId, 
     WTSSessionId, 
     WTSUserName, 
     WTSWinStationName, 
     WTSDomainName, 
     WTSConnectState, 
     WTSClientBuildNumber, 
     WTSClientName, 
     WTSClientDirectory, 
     WTSClientProductId, 
     WTSClientHardwareId, 
     WTSClientAddress, 
     WTSClientDisplay, 
     WTSClientProtocolType 
    }; 

    [StructLayout(LayoutKind.Sequential)] 
    public struct WTS_CLIENT_ADDRESS 
    { 
     public uint AddressFamily; 
     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)] 
     public byte[] Address; 
    } 

    public class PS { 

     public const IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero; 
     public const int WTS_CURRENT_SESSION = -1; 

     [DllImport("wtsapi32.dll", EntryPoint="WTSQuerySessionInformation")] 
     public static extern bool WTSQuerySessionInformation(
      System.IntPtr hServer, 
      int sessionId, 
      WTS_INFO_CLASS wtsInfoClass, 
      out System.IntPtr ppBuffer, 
      out uint pBytesReturned); 

     [DllImport("wtsapi32.dll", EntryPoint="WTSFreeMemory")] 
     public static extern void WTSFreeMemory(
      IntPtr memory);   
    } 
} 
'@ 

Add-Type -TypeDefinition $Wtsapi32 
+0

Ich bekomme einen "UnrecognizedToken" -Fehler, wenn ich dies in Powershell – Jeremy

+0

ausführen Sind Sie sicher, dass Sie den vollständigen Code verwendet haben, da ein paar Zeilen aus dem Codeblock fallen? – Remko

Verwandte Themen