我正在尝试编写一个脚本来记录用户启动远程桌面以登录到 Windows 服务器的 Windows 客户端的 IP 地址。如何在Server中获取客户端的IP地址?
问问题
29327 次
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 回答