5

我正在尝试编写一个脚本来记录用户启动远程桌面以登录到 Windows 服务器的 Windows 客户端的 IP 地址。如何在Server中获取客户端的IP地址?

4

3 回答 3

5

所以,你忽略代理......

  • 在域中使用 environment var: CLIENTNAME 您可以将其解析回 IP

没有域控制器:

  • 使用 WMI 脚本,您可以访问事件日志,来源:安全,查找登录/注销类别,其中用户名 = 环境变量 USERNAME
于 2009-10-02T15:21:49.983 回答
1

如果您使用 PowerShell 或 .NET 语言,Cassia 库的主干版本支持这一点——只需从构建服务器获取最新构建(以访客身份登录并使用工件链接)。要打印本地服务器上所有会话的远程地址,您可能会使用如下内容:

ITerminalServicesManager manager = new TerminalServicesManager();
foreach (ITerminalServicesSession session in manager.GetLocalServer().GetSessions())
{
    IPEndPoint ipEndPoint = session.RemoteEndPoint as IPEndPoint;
    if (ipEndPoint != null)
    {
        Console.WriteLine(ipEndPoint.Address);
    }
}
于 2009-10-05T11:42:51.133 回答
1

如果你想使用“纯”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
于 2009-10-08T17:49:14.400 回答