是否可以使用.Net框架以编程方式记录对Windows共享(SMB共享)的访问?

时间:2009-07-14 16:28:26

标签: c# .net windows winapi

只是想知道是否有可能找出谁从Windows共享中读取文件(理想情况下使用.NET但win32 native会这样做)?

我尝试做的是为Windows共享创建类似awstats的内容,这样我就可以看到谁在访问哪些内容以及哪些内容是最受欢迎的文件。

我对更改不感兴趣 - 我只想记录访问(随时间)以及ip / hostname和什么文件。

4 个答案:

答案 0 :(得分:3)

这可以使用WMI ...下面的示例c#片段用于识别谁访问股票当前

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中。如果在网络路径中检测到更改,则触发上述代码。

答案 1 :(得分:2)

你想要FileSystemWatcher。构建一个使用它并记录更改的程序。

答案 2 :(得分:1)

SMB在端口445上默认运行。因此,您只需记录端口445(或您正在运行它的任何端口)上的流量,并轻松按摩您需要的任何数据。

我会使用WinPcapWinDump(Windows版本的libpcap和tcpdump)。定义自定义规则(例如,仅在一个或一系列端口上记录数据)很容易。查看the manual的“表达式”部分。有许多不同语言的解析器可用于数据文件。快速搜索将为您找到所需内容。

答案 3 :(得分:0)

为了在.NET中使用WinPcap执行此操作,您可以使用Pcap.Net。 它是用C ++ / CLI和C#编写的WinPcap的包装器,它包含一个包解释框架。