如何用C#检测本地网络上的文件复制

本文关键字:文件 复制 本地网络 何用 检测 | 更新日期: 2023-09-27 18:00:20

我必须用.NET Framework创建一个简单的应用程序,它可以检测远程用户何时从应用程序将运行的机器上复制一些文件。

例如。

  • Machine1(应用程序将在此处运行)
  • 机器2

Machine2上的用户访问Machine 1的共享目录,并将一些文件复制到Machine2

我需要记录被复制的文件名和请求复制的IP/DNS。

有一些Windows消息可以做吗?

甚至任何IO类?

一个要求是我必须通过自定义应用程序来完成这项工作。

如何用C#检测本地网络上的文件复制

如果文件被访问,您无法从C#程序中检测到,没有消息或公开的API会告诉您何时发生。您需要在操作系统中进入较低级别。正常的方法是将窗口本身设置为通过Computer Configuration'Windows Settings'Security Settings'Advanced Audit Policy Configuration'Audit Policies'下的组策略进行监控,然后启用Object Access: File Share

这将创建一个审计日志条目,如以下

日志名称:安全来源:Microsoft Windows安全审核日期:2013年8月14日上午2:08.25事件ID:5145任务类别:详细文件共享级别:信息关键词:审核成功用户:不适用计算机:RootMS01.Reskit.com说明:已检查网络共享对象以查看是否可以授予客户端所需的访问权限。主题:安全ID:RESKIT''Administrator帐户名称:管理员帐户域:RESKIT登录ID:0x49199网络信息:对象类型:文件来源地址:10.10.10.11来源端口:61361共享信息:股份名称:''''*''Shares共享路径:''??''C: ''股份相对目标名称:UserHomeFolder''LSkywalker''Projects.txt访问请求信息:访问掩码:0x120089访问:READ_CONTROL同步ReadData(或ListDirectory)ReadEAReadAttributes访问检查结果:READ_CONTROL:由所有权授予同步:由D:授予:(A;;FA;;WD)ReadData(或ListDirectory):由D:(A;;FA;;WD)授予ReadEA:授予D:(A;;FA;;WD)

你可以在日志中看到被访问的文件和访问它的机器的IP,你所需要做的就是编写一个C#程序来读取日志并提取你需要的信息。

下面是一篇详细的technet文章,解释如何设置它。