Я никогда не уверен, что это правильное место, чтобы спросить, но если нет, пожалуйста, дайте мне знать.
Так что мне нужно получить список журналов неудачной аутентификации FTP, более конкретно получить IP-адреса, гдеони возникли.Это не зависит от программного обеспечения, поэтому я не буду получать их из папки или около того, они должны приходить из Event Viewer.
Но я не нашел ни одного события, предназначенного специально для этой цели, и я неЯ точно не знаю, существуют ли они.
У меня есть некоторый код (большая часть которого была скопирована из другого вопроса, название которого я не помню), чтобы получить информацию о событии в формате xml, откуда я затем получаюподстроки с IP-адресами и именами пользователей.Вот функции:
public string QueryActiveLog()
{
string res = "";
string queryString = @"
<QueryList>
<Query Id='0' Path='Security'>
<Select Path='Security'>*[System[(EventID=4624)]] and *[EventData[Data[@Name='IpAddress']!='-']]</Select>
</Query>
</QueryList>";
EventLogQuery eventsQuery = new EventLogQuery("Security", PathType.LogName, queryString);
EventLogReader logReader = new EventLogReader(eventsQuery);
// Display event info
res = DisplayEventLogInformation(logReader);
return res;
}
public string DisplayEventLogInformation(EventLogReader logReader)
{
string res = "";
for (EventRecord eventInstance = logReader.ReadEvent(); null != eventInstance; eventInstance = logReader.ReadEvent())
{
EventLogRecord logRecord = (EventLogRecord)eventInstance;
res += logRecord.ToXml() + Environment.NewLine + Environment.NewLine;
}
return res;
}
/// <summary>
/// orig -> original string // Options for args: "ip" -> get IPs from string, "user" -> get user names from string
/// </summary>
/// <param name="orig"></param>
/// <param name="args"></param>
/// <returns></returns>
public List<string> getSubstrings(string orig, string args)
{
int index1 = 0, index2 = 0;
List<string> subres = new List<string>();
switch (args)
{
case "ip":
while (index2 < orig.LastIndexOf("<Data Name='IpAddress'>"))
{
index1 = orig.IndexOf("<Data Name='IpAddress'>", index2) + 23;
index2 = orig.IndexOf("</Data>", index1);
subres.Add(orig.Substring(index1, index2 - index1));
}
return subres;
case "user":
while (index2 < orig.LastIndexOf("<Data Name='SubjectUserName'>"))
{
index1 = orig.IndexOf("<Data Name='SubjectUserName'>", index2) + 29;
index2 = orig.IndexOf("$</Data>", index1);
subres.Add(orig.Substring(index1, index2 - index1));
}
return subres;
default:
subres.Add("Invalid option");
return subres;
}
}
Здесь событие, из которого он получает информацию, - 4624 (просто в качестве примера), мой вопрос: есть ли событие специально для случаев неудачной аутентификации FTP, чтобы я мог использоватьв этом формате.
РЕДАКТИРОВАТЬ
Как пояснил Мартин Прикрыл, чтобы уточнить, я на стороне сервера и хочу получать уведомления о том, когда клиент пытаетсяне удается получить доступ к моему серверу, независимо от того, какое программное обеспечение использует клиент.