Как узнать имя хоста компьютера, который получил доступ к общей папке
Я должен отслеживать общую папку на сервере на предмет изменений, происходящих в этой папке с помощью компьютера, подключенного к сети(это имя хоста). Я реализовал мониторинг каталогов и файлов с помощью C#. Но он отслеживает только такие события, как созданные, переименованные, измененные, удаленные и ошибки. Мне также нужна помощь в отслеживании имени хоста/IP-адреса компьютера, получающего доступ или вносящего изменения в общую папку. Я пробовал этот подход, но до сих пор не могу получить имя хоста. Пожалуйста, помогите мне, где я иду не так! Вот мой код :
Что я уже пробовал:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; using System.IO; namespace MonitorShare { public partial class Monitor : ServiceBase { public Monitor() { InitializeComponent(); string dDirectory = @"E:\SharedFolder\Shares"; DirectoryInfo info = new DirectoryInfo(dDirectory); string[] filePath = Directory.GetFiles(dDirectory, "*.*"); FileSystemWatcher watcher = new FileSystemWatcher(); watcher.BeginInit(); watcher.filePath = dDirectory; watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; watcher.Changed += new FileSystemEventHandler(watcher_Changed); watcher.Created += new FileSystemEventHandler(watcher_Created); watcher.Deleted += new FileSystemEventHandler(watcher_Deleted); watcher.Filter = "*.*"; watcher.EnableRaisingEvents = true; watcher.EndInit(); } protected void watcher_Deleted(object sender, FileSystemEventArgs e) { var process = new Process(); process.StartInfo.FileName = "openfiles.exe"; process.StartInfo.Arguments = "/query /FO CSV /v"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; try { process.Start(); if ((process.StandardOutput != null)) { var result = process.StandardOutput.ReadToEnd().Trim().Replace("\"", ""); var lines = result.Split('\n'); var firstLineIndex = 1 + lines.Cast<string>().ToList().FindIndex(l => l.Contains("Hostname")); for (var i = firstLineIndex; i < lines.Count() && firstLineIndex > 0; i++) { var fields = lines[i].Split(','); var time = DateTime.Now; FileStream fs = new FileStream(@"C:\SFD\log.txt", FileMode.Append); StreamWriter sw = new StreamWriter(fs); if(firstLineIndex.ToString()=="Hostname") { Console.SetOut(sw); Console.WriteLine(e.FullPath + "\t" + e.ChangeType + "\t" + time + "\t" + e.Name + "\t" + fields[0]); sw.Close(); } } } process.WaitForExit(); } catch (Exception ex) { } finally { process.Close(); } } protected void watcher_Created(object sender, FileSystemEventArgs e) { var process = new Process(); process.StartInfo.FileName = "openfiles.exe"; process.StartInfo.Arguments = "/query /FO CSV /v"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; try { process.Start(); if ((process.StandardOutput != null)) { var result = process.StandardOutput.ReadToEnd().Trim().Replace("\"", ""); var lines = result.Split('\n'); var firstLineIndex = 1 + lines.Cast<string>().ToList().FindIndex(l => l.Contains("Hostname")); for (var i = firstLineIndex; i < lines.Count() && firstLineIndex > 0; i++) { var fields = lines[i].Split(','); var time = DateTime.Now; FileStream fs = new FileStream(@"C:\SFD\log.txt", FileMode.Append); StreamWriter sw = new StreamWriter(fs); if(firstLineIndex.ToString()=="Hostname") { Console.SetOut(sw); Console.WriteLine(e.FullPath + "\t" + e.ChangeType + "\t" + time + "\t" + e.Name + "\t" + fields[0]); sw.Close(); } } } process.WaitForExit(); } catch (Exception ex) { } finally { process.Close(); } } protected override void OnStart(string[] args) { } protected override void OnStop() { } } }