Как стать автором
Обновить

Программная визуализация схемы локальной сети

Время на прочтение 2 мин
Количество просмотров 15K
Сложная локальная сеть с различными подсетями представляет собой разветвленную структуру, которую можно отнести к графу. Компьютеры и маршрутизаторы представляются как узлы графа, а связи между ними – ребра графа.

image

Как же это знание поможет нам отобразить локальную сеть?

QuickGraph

Существует прекрасная бесплатная библиотека для работы с графами – QuickGraph. Работа с графами в этой библиотека реализована очень просто.

Импортируем пространство имен:
Imports QuickGraph

Объявляем граф:
Dim graph As New BidirectionalGraph(Of Object, IEdge(Of Object))

Как ранее было сказано, компьютеры – это узлы нашего графа. Добавляем узел:
graph.AddVertex("ИмяКомпьютера")

Список компьютеров мы возьмем из Active Directory:
Dim de As New DirectoryServices.DirectoryEntry
Dim search As New DirectorySearcher(de)
search.Filter = "(objectCategory=computer)"
Dim results As SearchResultCollection = search.FindAll()
For i As Integer = 0 To results.Count - 1
Dim de2 As DirectoryEntry = results(i).GetDirectoryEntry
Dim ComputerName As String = CType(de2.InvokeGet("cn"), String)
graph.AddVertex(ComputerName)
Next


Замечательно, но полученный результат получился мало похожим на граф. У нас отсутствуют связи между узлами.

Как известно все компьютеры имеют общие точки, с которыми они связаны – маршрутизаторы (роутеры). Возможен вариант, когда локальная сеть не имеет маршрутизатора, но в этом случае ее визуализация достаточно проста.

Каждый компьютер сети напрямую связан с маршрутизатором, адрес которого прописан как шлюз в свойствах сетевой платы компьютера.

Пройдясь по компьютерам при помощи WMI…
Private Function GetGateway(ByVal ComputerName As String) As String
Dim s As String = String.Empty
Dim query As ManagementObjectSearcher
Dim queryCollection As ManagementObjectCollection
Dim msc As ManagementScope = New ManagementScope("\\" + ComputerName + "\root\cimv2")
query = New ManagementObjectSearcher(msc, New SelectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration"))
queryCollection = query.Get()
For Each mObject As ManagementObject In queryCollection
Try
If mObject("DefaultIPGateway").ToString <> "" Then
s = mObject("DefaultIPGateway")(0).ToString
End If
Catch
End Try
Next
Return s
End Function


… получим список всех шлюзов. Добавим их в граф, так же как и компьютеры:
graph.AddVertex("ИмяШлюза")

Одновременно с добавлением узлов, добавим связь между компьютером и шлюзом:
graph.AddEdge(New Edge(Of Object)("ИмяКомпьютера", "ИмяШлюза"))

Вот теперь мы получили граф, но только не визуальный.

Graph#

QuickGraph поддерживает MSAGL, GLEE и Graphviz для визуализации графов, но мы воспользуемся Graph#. Данный фреймворк содержит различные алгоритмы для визуализации графов в WPF приложениях.

Размещаем на форме GraphLayuot контрол из данного фреймворка и пишем простую строку для отображения созданного нами ранее графа:
GraphLayout.Graph = graph

И это все, что нам нужно. Все остальное возьмет на себя Graph#.

image

Ссылки:
QuickGraph
Graph#
Теги:
Хабы:
+5
Комментарии 7
Комментарии Комментарии 7

Публикации

Истории

Работа

.NET разработчик
69 вакансий

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн