只是想知道是否有可能找出谁已经从Windows共享(使用.NET的理想,但本地Win32会做的)读取文件?
我试图做的是创build一个像Windows共享awstats ,所以我可以看到谁正在访问什么,哪些是最stream行的文件。
我对变化不感兴趣 – 我只想logging访问(随着时间)与IP /主机名和什么文件。
这是可能的使用WMI …下面的示例C#代码片段用于确定谁访问股票currenlty
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)来完成。 定义自定义规则(比如只记录一个或一系列端口上的数据)很简单。 查看手册的“表达式”部分。 数据文件中有许多不同语言的解析器。 快速搜索将找到你所需要的。
为了在.NET中使用WinPcap,你可以使用Pcap.Net 。 它是用C ++ / CLI和C#编写的WinPcap的包装,它包含一个数据包解释框架。