我必須用.NET Framework創建一個簡單的應用程序,該應用程序可以檢測遠程用戶何時從應用程序將運行的計算機上覆制某個文件。如何使用C#檢測本地網絡上的文件副本?
例如,
- MACHINE1(該應用程序將在這裏運行)
- 機器2
用戶在機器2訪問的MACHINE1和一些文件複製到一些共享目錄Machine2目錄。
我需要記錄複製的文件名和請求複製的IP/DNS。
是否有一些Windows消息來做到這一點?
甚至任何IO類?
一個要求是我必須通過自定義應用程序來做到這一點。
我必須用.NET Framework創建一個簡單的應用程序,該應用程序可以檢測遠程用戶何時從應用程序將運行的計算機上覆制某個文件。如何使用C#檢測本地網絡上的文件副本?
例如,
用戶在機器2訪問的MACHINE1和一些文件複製到一些共享目錄Machine2目錄。
我需要記錄複製的文件名和請求複製的IP/DNS。
是否有一些Windows消息來做到這一點?
甚至任何IO類?
一個要求是我必須通過自定義應用程序來做到這一點。
如果一個文件被訪問過,沒有消息或暴露的API會告訴你什麼時候發生,你無法從C#程序中檢測到。您需要在操作系統中降低級別。這樣做的正常方法是您設置窗口本身以通過組策略執行監視Computer Configuration\Windows Settings\Security Settings\Advanced Audit Policy Configuration\Audit Policies\
,然後啓用Object Access: File Share
。
這將創建類似下面的
Log Name: Security Source: Microsoft-Windows-Security-Auditing Date: 8/14/2013 2:08:25 AM Event ID: 5145 Task Category: Detailed File Share Level: Information Keywords: Audit Success User: N/A Computer: RootMS01.Reskit.com Description: A network share object was checked to see whether client can be granted desired access. Subject: Security ID: RESKIT\Administrator Account Name: Administrator Account Domain: RESKIT Logon ID: 0x49199 Network Information: Object Type: File Source Address: 10.10.10.11 Source Port: 61361 Share Information: Share Name: \\*\Shares Share Path: \??\C:\Shares Relative Target Name: UserHomeFolder\LSkywalker\Projects.txt Access Request Information: Access Mask: 0x120089 Accesses: READ_CONTROL SYNCHRONIZE ReadData (or ListDirectory) ReadEA ReadAttributes Access Check Results: READ_CONTROL: Granted by Ownership SYNCHRONIZE: Granted by D:(A;;FA;;;WD) ReadData (or ListDirectory): Granted by D:(A;;FA;;;WD) ReadEA: Granted by D:(A;;FA;;;WD)
你可以看到,被訪問和機器的IP訪問它是記錄在文件中的審計日誌條目,所有你需要做的是寫一個C#程序reads the log並提取您需要的信息。
您好斯科特,Tks回覆。 我可以在裝有Windows 7的電腦上執行此任務嗎? –
是的,審計策略並不特定於服務器版本的Windows。 –
它不適用於Windows 8/8.1 :(僅適用於專業版/企業版) –
看看[FileSystemWatcher](http://www.codeproject.com/Articles/26528/C-Application-to-Watch-a-File-or-Directory-using-F)。 –
Hello @Riciculated Spline! 我知道這個班的一些東西,但我看到它沒有檢測到有人複製文件,例如:Ctrl + C從遠程機器 –