У меня есть sonicwall в сети около 100 машин.
Я пробовал и пытался найти способ создания 2 combobox, который будет содержать как IP-адреса, связанные с sonicwall, так и вхожденный в систему пользователя.
То, что я пытаюсь создать, - это программное обеспечение для мониторинга сотрудников (например, Interguard/ActivTrak/etc), но в настоящее время я не могу даже приблизиться к поиску этой информации?
Я изучал много вещей (~ 25 страниц Google, ни одной ссылки не было нажата), и не пришли к выводу, что получить эту информацию.
Я не совсем отличный программист, но я бы ЛЮБЛЮ, чтобы иметь возможность получать эту информацию в два списка/массивов combobox/других подходящих объектов/элементов управления.
Если кто-то знает способ создания массива IP-адресов вместе с соответствующими логинами, это будет очень полезно для этого проекта!
(ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Я знаю, что есть сайт обмена через сеть, но я уже посмотрел! Кроме того, поскольку я разрабатываю для этого часть программного обеспечения, я думал, что я бы спросил его здесь!)
Спасибо за любые советы/предложения, которые были высоко оценены!
То, что вы ищете, похоже на приложение пакетного сниффера, например wirehark или эфир. Но если вы хотите самостоятельно его спроектировать, я считаю, что лучшим решением является коллекция/список для хранения данных, привязанных к datagrid.
Если вы находитесь в домене Active Directory, вы можете использовать код из моего вопроса S/O. Вместо того, чтобы использовать метод CheckConnectionAsync() для проверки возможности подключения, вы можете просто перезаписать его, чтобы получить IP-адрес с помощью System.Net.Dns.
Чтобы получить пользователя, вы можете использовать WMI. Для этого вам нужно сделать ссылку на пространство имен System.Management.
public Task<string> GetUserName(string ComputerName)
{
return Task.Run(() =>
{
ConnectionOptions conn = ConnectionOptions()
{
EnablePrivileges = true,
Username = // string in format of @"DomainName\UserName",
Password = password,
Authentication = AuthenticationLevel.PacketPrivacy,
Impersonation = ImpersonationLevel.Impersonate
};
ManagementScope scope = new ManagementScope(@"\\" + ComputerName + @"\root\cimv2", conn);
try
{
scope.Connect();
ObjectQuery user = new ObjectQuery("Select UserName From Win32_ComputerSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, user);
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject m in collection)
{
string username = m["UserName"].ToString().Trim();
if(!String.IsNullOrEmpty(username))
{
return username;
}
}
return null; // no current logged in user
}
catch (Exception) // error handling...
});
}
Затем просто перейдите по своей коллекции компьютеров и получите имя пользователя так:
private async Task RetrieveUsers()
{
Parallel.ForEach(Computers, c =>
{
string user = await GetUserName(c.Name); // or c.IP. both work.
});
}