Próbuję napisać skrypt, aby zarejestrować adres IP klienta Windows, z którego użytkownik zainicjował zdalny pulpit, aby zalogować się do systemu Windows Server. Jak przechwycić adres IP klienta na serwerze?Jak uzyskać adres IP klienta pulpitu zdalnego?
5
A
Odpowiedz
5
Więc ignorować proxy ...
- użyciu środowiska var: clientname w domenie można rozwiązać go z powrotem do OD
bez kontrolera domeny:
- używając WMI skrypt, który można uzyskać w Dzienniku zdarzeń, źródło: Zabezpieczenia, poszukaj kategorii Loguj/Wyloguj, gdzie nazwa użytkownika = zmienna środowiskowa USERNAME
1
Jeśli używasz PowerShell lub języka .NET, wersja trunk z Cassia library obsługuje to - po prostu pobierz najnowszą kompilację z build server (zaloguj się jako gość i użyj linku artefaktów). Aby wydrukować zdalne adresy wszystkich sesji na serwerze lokalnym, można użyć coś jak następuje:
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
Jeśli chcesz korzystać z „czystym” 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
co wielu klientów przyszedł z tego samego serwera proxy? – Dewfy
Załóżmy, że nie ma proxy ;-) – BlueGene
Ciekawość, w jaki sposób wykonujecie skrypt? – chaz