none
Получение IP адреса клиента RDP из логов RRS feed

  • Вопрос

  • Пытаюсь извлечь IP текущего залогиненного пользователя RDP из логов, и не могу понять, как передать SID текущего пользователя. Из документации он идет параметром UserID=<SID> . Что только не пробывал туда передовать, но без результатно. И такой вариант тоже не подёшел.

    $objUser = New-Object System.Security.Principal.NTAccount($env:UserName)
    $strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
    $strSID.Value

    Использую такой код

    Get-WinEvent -FilterHashtable @{Logname="Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"; Id =21; UserID= ??????}

    • Перемещено Vector BCOModerator 31 мая 2017 г. 13:18 Вопрос про скрипты в рамках 2016 сервера

Ответы

  • 1. 21 - событие не содержит SID

    2. UserID - не работает в версии ниже PowerShell 6, т.к. баг с запросом.

    $user = "$env:USERDOMAIN\$env:USERNAME"
    $fx = "*[System[(EventID=21)]] and *[UserData[EventXML[(User='$user')]]]"
    $log = "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"
    Get-WinEvent -LogName $log -FilterXPath $fx -MaxEvents 1 | Select @{n="Name";e={$_.Properties[0].Value}},@{n="IPAddress";e={$_.Properties[2].Value}}

    • Помечено в качестве ответа KazunEditor 31 мая 2017 г. 13:26
    Отвечающий

Все ответы

  • я Вам в прошлой теме писал. Вы пробовали?

    Get-WinEvent -FilterHashtable @{Logname="Security";id=4624} | where {$_.Properties[17].Value -eq "C:\Windows\System32\winlogon.exe"} | Foreach {$_.TimeCreated,$_.Properties[5].Value,$_.Properties[18].Value}

    это выдаст Вам список всех пользователей (и терминальных и консольных), время входа и IP, с которого они входили:

    Wednesday, 31. May 2017 10:50:33
    username
    10.255.9.125

    Модератор
  • 1. 21 - событие не содержит SID

    2. UserID - не работает в версии ниже PowerShell 6, т.к. баг с запросом.

    $user = "$env:USERDOMAIN\$env:USERNAME"
    $fx = "*[System[(EventID=21)]] and *[UserData[EventXML[(User='$user')]]]"
    $log = "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational"
    Get-WinEvent -LogName $log -FilterXPath $fx -MaxEvents 1 | Select @{n="Name";e={$_.Properties[0].Value}},@{n="IPAddress";e={$_.Properties[2].Value}}

    • Помечено в качестве ответа KazunEditor 31 мая 2017 г. 13:26
    Отвечающий
  • Спасибо большое! Ваш код великолепно работает!
  • $fx = "*[System[(EventID=21)]] and *[UserData[EventXML[(User='$user')]]]"
    

    Подскажите, почему не получается подставить событие за номером 4624 (Успешный логин). Если меняю

     EventID=4624 и журнал на "Microsoft-Windows-Security-Auditing"

    Сообщает, что нет такого журнала.

    $user = "$env:USERDOMAIN\$env:USERNAME"
    $fx = "*[System[(EventID=4624)]] and *[UserData[EventXML[(User='$user')]]]"
    $log = "Microsoft-Windows-Security-Auditing"
    $ip = Get-WinEvent -LogName $log -FilterXPath $fx -MaxEvents 1 | Select @{n="IPAddress";e={$_.Properties[2].Value}}
    $ip.IPAddress

  • потому что Вы путь подставляете не полный. откройте свойства лога и скопируйте строчку Full name.

    У меня нет 2016 сервера под рукой в связи с чем нет и такой ветки логов но отличительной чертой имени является слеш как в примере выше

    Например Microsoft-Windows-Security-Audit-Configuration-Client/Operational


    The opinion expressed by me is not an official position of Microsoft


    Модератор
  •  Еще до того как написать, я забрал все логи через

    Get-WinEvent -ListLog * -EA silentlycontinue и с удивлением обнаружил 0 записей

    Circular             1052672           0 Microsoft-Windows-Security-Audit-Configuration-Client/Operational


  • От бездумного копирования каких-то строк, ничего не получится. Откуда в событии 4624 поле User? С чего было решено, что Properties[2] - это IP? С чего такая уверенность, что в 4624 обязательно должен быть IP?

    $fx = "*[System[(EventID=4624)] and EventData[Data[@Name='TargetUserName']='$env:USERNAME']]"
    Get-WinEvent -LogName Security -FilterXPath $fx -MaxEvents 1 | Select @{n="Name";e={$_.Properties[5].Value}},@{n="IPAddress";e={$_.Properties[18].Value}}

    Для фильтрации именно RDP(LogonType=10):

    $fx = "*[System[(EventID=4624)] and EventData[Data[@Name='TargetUserName']='$env:USERNAME'] andEventData[Data[@Name='LogonType']='10']]"

    Get-WinEvent -LogName Security -FilterXPath $fx -MaxEvents 1 | Select @{n="Name";e={$_.Properties[5].Value}},@{n="IPAddress";e={$_.Properties[18].Value}}


    • Изменено KazunEditor 1 июня 2017 г. 5:57
    Отвечающий
  • Пардон, просто не мог понять, как именно Вы берете свойства для логов. Ваш последний код, это то что надо! Спасибо большое за помощь!