Как получить IP-адреса всего в сети в c #

1

У меня есть sonicwall в сети около 100 машин.

Я пробовал и пытался найти способ создания 2 combobox, который будет содержать как IP-адреса, связанные с sonicwall, так и вхожденный в систему пользователя.

То, что я пытаюсь создать, - это программное обеспечение для мониторинга сотрудников (например, Interguard/ActivTrak/etc), но в настоящее время я не могу даже приблизиться к поиску этой информации?

Я изучал много вещей (~ 25 страниц Google, ни одной ссылки не было нажата), и не пришли к выводу, что получить эту информацию.

Я не совсем отличный программист, но я бы ЛЮБЛЮ, чтобы иметь возможность получать эту информацию в два списка/массивов combobox/других подходящих объектов/элементов управления.

Если кто-то знает способ создания массива IP-адресов вместе с соответствующими логинами, это будет очень полезно для этого проекта!

(ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Я знаю, что есть сайт обмена через сеть, но я уже посмотрел! Кроме того, поскольку я разрабатываю для этого часть программного обеспечения, я думал, что я бы спросил его здесь!)

Спасибо за любые советы/предложения, которые были высоко оценены!

Теги:
networking
ip

2 ответа

0

То, что вы ищете, похоже на приложение пакетного сниффера, например wirehark или эфир. Но если вы хотите самостоятельно его спроектировать, я считаю, что лучшим решением является коллекция/список для хранения данных, привязанных к datagrid.

  • 0
    у него были бы элементы да, но даже у wireshark есть свои ограничения!
0

Если вы находитесь в домене 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.
    });
}
  • 0
    не будет ли это иметь серьезные проблемы с безопасностью, хотя?
  • 0
    Вы должны иметь учетную запись с учетными данными администратора для выполнения этих методов. Это было бы то же самое, что пытаться получить доступ к AD без учетной записи с разрешениями на что-либо в AD. Так что на самом деле никаких проблем с безопасностью. Все зависит от того, как вы предоставляете аутентификационную информацию для методов.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню