【发布时间】:2010-11-10 17:23:07
【问题描述】:
只是想知道是否有可能找出谁从 Windows 共享中读取了文件(理想情况下使用 .NET,但 win32 本机可以)?
我正在尝试为 Windows 共享创建类似 awstats 的内容,这样我就可以看到谁在访问哪些文件以及哪些是最受欢迎的文件。
我对更改不感兴趣 - 我只想记录访问(随时间)以及 ip/主机名和什么文件。
【问题讨论】:
只是想知道是否有可能找出谁从 Windows 共享中读取了文件(理想情况下使用 .NET,但 win32 本机可以)?
我正在尝试为 Windows 共享创建类似 awstats 的内容,这样我就可以看到谁在访问哪些文件以及哪些是最受欢迎的文件。
我对更改不感兴趣 - 我只想记录访问(随时间)以及 ip/主机名和什么文件。
【问题讨论】:
这可以使用 WMI... 下面的示例 c# sn-p 用于识别谁在访问当前共享
using System.Management;
ManagementObjectSearcher search =
new ManagementObjectSearcher("root\\CIMV2","SELECT * FROM Win32_ConnectionShare");
foreach (ManagementObject MO in search.Get())
{
string antecedent = MO["antecedent"].ToString();
ManagementObject share = new ManagementObject(antecedent);
string dependent = MO["dependent"].ToString();
ManagementObject server = new ManagementObject(dependent);
string userName = server["UserName"].ToString();
string compname = server["ComputerName"].ToString();
string sharename = server["ShareName"].ToString();
}
我不确定 WMI 的核心文件事件侦听器。但是您可以很好地将其集成到 NoramlFileSystemWatcher 中。并在检测到网络路径发生变化时触发上述代码。
【讨论】:
你想要FileSystemWatcher。构建一个使用它并记录更改的程序。
【讨论】:
SMB 默认在端口 445 上运行。因此您只需在端口 445(或您碰巧在其上运行的任何端口)上记录流量,然后将其轻松地按摩到您需要的任何数据中。
我会使用WinPcap 和WinDump(Windows 版本的 libpcap 和 tcpdump)来实现。定义自定义规则(例如,仅在一个或一系列端口上记录数据)很容易。查看the manual 的“表达式”部分。数据文件有许多不同语言的解析器。快速搜索会找到您需要的内容。
【讨论】:
为了在 .NET 中使用 WinPcap,您可以使用 Pcap.Net。 它是用 C++/CLI 和 C# 编写的 WinPcap 包装器,它包含一个数据包解释框架。
【讨论】: