我有一台 Windows Server 2008,它共享一个文件夹。许多客户端访问该文件夹和继承文件。一个客户端偶尔以 rw 模式打开一个 dll 文件,因此此后其他客户端都无法加载该 dll。
现在我想确定哪个客户端执行了此操作。我找到的所有工具:
- 打开文件
- 网
- 分享观察
- 网络共享监控
没有显示以 rw 模式打开文件的网络客户端。
我认为它是防病毒程序,但我需要知道哪个客户端打开了该文件。
编辑:
- 客户端是 Windows 机器
- 所有客户端都使用同一个用户,所以我无法确定用户名对应的客户端
答案1
答案2
多年来我们一直想这样做!
今天我们发现了这个实用程序:
https://www.nirsoft.net/utils/network_opened_files.html
极好的!
编辑:
您可以使用 Nirsoft 的 NetworkOpenedFiles 来确定哪个主机在 Windows 文件共享上打开了文件。
答案3
这是一个老问题,但尽管如此:
如果您拥有 PowerShell 4.0+(Windows Server 2008 未附带,您必须更新您的 PowerShell 版本),您可以使用以下命令:
直接在服务器上:
Get-SmbOpenFile | where-object { $_.Path -like 'C:\foo\bar\*' }
从 RemoteMachine:
$cim = New-CimSession ServerName -Credential (get-credential)
Get-SmbOpenFile -CimSession $cim | where-object { $_.Path -like 'C:\foo\bar\*' }
Get-SmbOpenfile
返回服务器上所有打开的文件的列表,我们对其进行过滤以where-object
仅查看我们正在寻找的文件。
除其他信息外,这将返回ClientComputerName
打开该文件的计算机的 IP。
以下是示例输出:
PS C:\WINDOWS\system32> get-smbopenfile -cimsession $cim | where-object { $_.Path -like 'D:\Daten\Transfer\*' }
FileId SessionId Path ShareRelativePath ClientComputerName ClientUserName PSComputerName
------ --------- ---- ----------------- ------------------ -------------- --------------
347355680805 348160786757 D:\Daten\TRANSFER\xy TRANSFER\xy 10.0.0.114 INTERNAL\xy Server
如果您想快速查看返回的 IP 地址的主机名,请使用:
[Net.DNS]::GetHostByAddress("10.0.0.114") | select -expand HostName