Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用.Net framework以编程方式记录对windows共享(SMB共享)的访问?_C#_.net_Windows_Winapi - Fatal编程技术网

C# 是否可以使用.Net framework以编程方式记录对windows共享(SMB共享)的访问?

C# 是否可以使用.Net framework以编程方式记录对windows共享(SMB共享)的访问?,c#,.net,windows,winapi,C#,.net,Windows,Winapi,只是想知道是否有可能找出谁从Windows共享中读取了文件(理想情况下使用.NET,但win32 native可以) 我想做的是创建一个类似windows共享的东西,这样我就可以看到谁正在访问什么以及哪些是最流行的文件 我对更改不感兴趣-我只想记录访问(随时间)以及ip/主机名和所需文件。您需要的。构建一个使用它并记录更改的程序 这可以使用WMI。。。下面是用于标识当前访问共享的用户的示例c#代码段 using System.Management; ManagementObjectSearch

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

我想做的是创建一个类似windows共享的东西,这样我就可以看到谁正在访问什么以及哪些是最流行的文件


我对更改不感兴趣-我只想记录访问(随时间)以及ip/主机名和所需文件。

您需要的。构建一个使用它并记录更改的程序

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

默认情况下,SMB在端口445上运行。因此,您可以只在端口445(或您运行它的任何端口)上记录流量,并将其轻松地转换为您需要的任何数据


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

为了使用.NET中的WinPcap进行搜索,您可以使用。
它是一个用C++/CLI和C#编写的WinPcap包装器,包括一个数据包解释框架。

此解决方案的一个问题是缓冲区可能会填充和丢失一些数据…我对更改不感兴趣-我只想记录访问(随时间)还有ip/主机名和什么文件。谢谢你的建议,但我已经签出了FileSystemWatcher,似乎没有区分网络访问和本地访问。FileSystemWatcher不进行审计,这是该用户基本上想要做的。您应该考虑的是启用审计并简单地监视事件日志。这将是一个可靠的开始。@Nissan Fan看起来只适用于Windows Server版本。我几乎想在Windows中编译samba并从中解析日志文件。