使用特定凭据在远程计算机上写入事件日志

时间:2018-09-09 05:15:46

标签: c# .net impersonation event-log

我一直在寻找一种使用特定凭据在远程计算机上写入事件日志的方法。这将用于审核域中我的应用程序的使用情况(该应用程序执行各种服务器任务,但可以从域中的任何PC上运行)。根据要求,该程序必须能够从域中的任何PC或通过VPN连接到域中的PC在具有指定凭据的指定服务器上创建事件日志。

我目前具有以下代码来创建事件日志:

EventLog evntlog = new EventLog("Application");
evntlog.MachineName = "192.168.0.5";
evntlog.Source = "Application";
evntlog.WriteEntry("Test Log.", EventLogEntryType.Information, 11573);

上面的EventLog名称空间似乎不允许为连接/远程计算机指定凭据。 同时,EventLogSession / EventLogReader可以按照下面的方法进行操作以检索事件日志(这对于我的测试场景非常适用):

string query = "*[System/EventID=11573]";
EventLogSession session = new EventLogSession("192.168.0.5", domain, userName, userPass, SessionAuthentication.Default);
EventLogQuery evntquery = new EventLogQuery("Application", PathType.LogName, query);
evntquery.Session = session;
EventLogReader logReader = new EventLogReader(evntquery);

我试图找到一种写入条目的方式,类似于上面的读取方式,但似乎找不到对应的条目(EventLog不支持Session)。模拟也是不可能的,因为该程序将完全指向另一个域,而无需它们之间的任何信任。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

可能不是您要找的答案,但这绝对不是实现此目的的方法。日志在逻辑上绑定到它们的上下文,即使您能够登录远程计算机,也会一团糟。

在不信任的情况下,您唯一的选择是启动某种代理,该代理将通过网络接受您的事件并为您存储事件。但是为什么要这样做呢? “ syslog”提供了很长一段时间,甚至Windows也拥有自己的用于管理日志集中化的基础结构。阅读以下内容:https://www.loggly.com/ultimate-guide/centralizing-windows-logs/我看到有关此内容的帖子,指出该功能也适用于独立域,但是您可能需要一些额外的工作来配置它。