![是否有 RDP 连接的日志文件(带有系统名称)](https://linux22.com/image/1389072/%E6%98%AF%E5%90%A6%E6%9C%89%20RDP%20%E8%BF%9E%E6%8E%A5%E7%9A%84%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%EF%BC%88%E5%B8%A6%E6%9C%89%E7%B3%BB%E7%BB%9F%E5%90%8D%E7%A7%B0%EF%BC%89.png)
有没有可能知道远程接管系统的系统名称?从日志中我们可以知道用户名(但这些是通用登录 ID)和 IP(但我们使用的是 DHCP,这些每天都在变化)。
在左侧的事件查看器树中应用程序和服务日志->视窗->终端服务-*,其中 * 是那里的所有日志。在终端服务本地会话管理器操作日志中,我们仅获取 IP 地址和用户名的详细信息。
我们可以在日志中找到系统名称吗?
答案1
好吧,开始吧...(这并不容易;)
第一的启用审计在secpol.msc
。
我发现这是必要的,因为其他事件触发得太早而无法获取主机名。
- 单击“开始”,
secpol.msc
然后键入enter。
将显示“本地安全策略”窗口 - 现在导航到
Local Policy
>Audit Policy
并右键单击Audit account logon events
策略选项并选择Properties
。 - 现在选中该
Success
框(这样失败的尝试将不会被记录) - 退出
secpol.msc
现在创建一个 VBScript 文件(例如名为c:\temp\log.vbs
):(
还可以编辑所需日志文件的位置,此处c:\temp\rdp.log
)
Function sessionNumber
Dim oShell, oExec, sOutput, iUserPos, iUserLen, iStatePos
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("query session %username%")
sOutput = LCase(oExec.StdOut.ReadAll)
iUserPos = InStr(sOutput,LCase(oShell.ExpandEnvironmentStrings("%username%")))
iStatePos = InStr(sOutput,"active")
iUserLen = Len(oShell.ExpandEnvironmentStrings("%username%"))
sessionNumber = CInt(Trim(Mid(sOutput,iUserPos+iUserLen,iStatePos-iUserPos-iUserLen)))
End Function
Function clientName
Dim oShell
Set oShell = CreateObject("WScript.Shell")
On Error Resume Next
clientName = LCase(oShell.RegRead("HKCU\Volatile Environment\"&sessionNumber&"\CLIENTNAME"))
If Err.Number<>0 Then
clientName = "unknown"
End If
End Function
outFile="c:\temp\rdp.log"
Const ForAppending = 8
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile=objFSO.OpenTextFile(outFile,ForAppending,True)
objFile.Write now() & " ; " & clientName & vbCrLf
objFile.Close
现在,最后一部分是创建一个用于启动该脚本的计划任务。
- 单击“开始”并输入,
taskschd.msc
然后点击enter。 Create Task
在右侧窗格中选择- 给它起个名字
Logon RDP
或者别的 - 在触发器选项卡中选择New并选择“开始任务”
On an event
- 在“日志”中选择
Security
并在“事件 ID”中输入4624
- 打Ok
- 在“操作”选项卡中选择New“启动程序”
- 在程序类型
cscript.exe
和添加参数类型中c:\temp\log.vbs
- 击中Ok两次
现在,当有人通过 RDP 登录时,他们的主机名就会登录c:\temp\rdp.log
请注意,本地登录也将被记录(我还没有测试过,因为我在远程:),
但我想这不是问题。
当然,您可以调整log.vbs
以包含用户名,远程 IP...等等。
(呼,Windows XP 简单多了。那个只是在事件中记录主机名)
也许有人能想出一个更简单的解决方案:)
编辑:
我还发现安全事件日志中有事件 ID 4624。查找带有 的事件Logon Type: 3
。它应该包含Workstation Name
通过 RDP 登录的计算机的。
An account was successfully logged on.
Subject:
Security ID: NULL SID
Account Name: -
Account Domain: -
Logon ID: 0x0
Logon Type: 3
New Logon:
Security ID: User-PC\User
Account Name: User
Account Domain: User-PC
Logon ID: 0xcd5c10
Logon GUID: {00000000-0000-0000-0000-000000000000}
Process Information:
Process ID: 0x0
Process Name: -
Network Information:
Workstation Name: XPS8500
Source Network Address: -
Source Port: -
编辑#2
这是从完全干净的 Windows 7 安装得到的。
(主机是Test-pc
,我登录的机器是XPS8500
):