2009-10-02 22 views
5

Kullanıcının Windows Server'a giriş yapması için Uzak Masaüstü'nü başlattığı Windows istemcisinin IP adresini günlüğe kaydetmek için bir komut dosyası yazmaya çalışıyorum. İstemcinin sunucudaki IP adresi nasıl alınır?Uzak Masaüstü İstemcisinin IP Adresi Nasıl Alınır?

+1

birden çok müşteri hakkında ne geldi aynı proxy sunucusundan? – Dewfy

+0

Sadece proxy olmadığını kabul edelim ;-) – BlueGene

+0

Merak etme, senaryonuzu nasıl yürütüyorsun? – chaz

cevap

5

Yani, çevre var kullanarak

  • ... vekil görmezden:

    • WMI kullanarak: etki alanındaki CLIENTNAME Etki alanı denetleyicisi olmadan IP

    geri çözebilirsiniz senaryo logosunu bulabilirsin, kaynak: Güvenlik, kategori için bak Logon/Logonun nerede olduğu kullanıcı adı = ortam değişkeni USERNAME

1

PowerShell veya .NET dili kullanıyorsanız, Cassia library'un gövde sürümü bunu desteklemektedir - en son sürümü build server'dan alın (konuk olarak oturum açın ve artifact bağlantılarını kullanın). Yerel sunucu üzerindeki tüm oturumların uzaktan adreslerini yazdırmak için, böyle bir şey kullanıyor olabilir şunlardır:

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

Eğer PowerShell 2.0 "saf" kullanmak istiyorsanız:

$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

Bunu bir Powershell uygulamasında çalıştırdığımda "UnrecognizedToken" hatası alıyorum – Jeremy

+0

Kodun tamamından birkaç satır göründüğü için kodun tamamını kullandığınızdan emin misiniz? – Remko