Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Получение списка компьютеров в локальной сети

#c_sharp #lan


Как мне получить список ip адресов,mac адресов и учетных записей компьютеров в локальной
сети? 
    


Ответы

Ответ 1



По своей сути это три разных задачи, близких друг к другу по смыслу. Чтобы получить список адресов сети, можно воспользоваться следующим кодом: public void GetLocalAddress() { // доступно ли сетевое подключение if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) return; // запросить у DNS-сервера IP-адрес, связанный с именем узла var host = Dns.GetHostEntry(Dns.GetHostName()); // Пройдем по списку IP-адресов, связанных с узлом foreach (var ip in host.AddressList) { // если текущий IP-адрес версии IPv4, то выведем его if (ip.AddressFamily == AddressFamily.InterNetwork) { Console.WriteLine(ip.ToString()); } } } Это для консольного приложения, но можно использовать где угодно, просто заменив Console.WriteLine. Полезные ссылки для ознакомления: Метод Dns.GetHostEntry Метод Dns.GetHostName Свойство IPHostEntry.AddressList Свойство IPAddress.AddressFamily Перечисление AddressFamily Метод NetworkInterface.GetIsNetworkAvailable С получением списка MAC-адресов дела обстоят так: public void GetMacAddress() { foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) { if (nic.OperationalStatus == OperationalStatus.Up) { Console.WriteLine(nic.GetPhysicalAddress().ToString()); } } } Или другой способ с помощью System.Management: public List GetMacAddress() { ManagementObjectSearcher objMOS = new ManagementObjectSearcher("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection objMOC = objMOS.Get(); List MACAddress = new List(); foreach (ManagementObject objMO in objMOC) { try { MACAddress.Add(objMO["MacAddress"].ToString()); objMO.Dispose(); // а может и не нужно } catch(Exception) { } } return MACAddress; } Полезные ссылки из получения MAC-адресов: Метод NetworkInterface.GetAllNetworkInterfaces Метод NetworkInterface.GetPhysicalAddress Перечисление OperationalStatus Очень полезно: C# Get Computer's MAC address “OFFLINE” Получение учетных записей программно - это проблема, которую нужно решать отдельно. Скорее всего так просто не выйдет. К примеру для конкретной машины, на которой будет запущено приложение - можно получить данные учетной записи через System.Management, вот так: ManagementObjectSearcher usersSearcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_UserAccount"); ManagementObjectCollection users = usersSearcher.Get(); Пример взят отсюда: How can I get a list Local Windows Users. В первом ответе, который принят упоминается о проблемах с брандмауэром и антивирусами, с чем я согласен. Причем учетная запись может быть доменной, а также и локальной. Это отдельный вопрос, требующий особого внимания.

Ответ 2



Что бы получить ip и mac можно использовать NetServerEnum и NetApiBufferFree из netapi32.dll - подключается через dllImport. Тем же способом и mac адреса машин. Для учетных записей к сожалению нужен будет либо доступ к домену либо пилить велосипед в виде клиент\сервера которые общаются по UDP. Клиент запускается на машине, данные которой нужно поулчить, после чего шлет всю инфу на определенный сервер (будут проблемки с антивирусами или брандмауэром, но если нужно только для своей сетки, вопрос вполне решаемый).

Комментариев нет:

Отправить комментарий