ローカルネットワーク図のソフトウェア視覚化

様々なサブネットを持つ複雑なローカルネットワークは、 グラフに起因する分岐構造です。 コンピューターとルーターはグラフのノードとして表され、それらの間の接続はグラフのエッジです。

画像

この知識は、ローカルネットワークの表示にどのように役立ちますか?

クイックグラフ

グラフを操作するための優れた無料ライブラリ-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)("", ""))

グラフはありますが、視覚的なグラフはありません。

グラフ番号

QuickGraphは、グラフの視覚化のためにMSAGL、GLEE、Graphvizをサポートしていますが、グラフ#を使用します。 このフレームワークには、WPFアプリケーションでグラフを視覚化するためのさまざまなアルゴリズムが含まれています。

このフレームワークのコントロールをGraphLayuotフォームに配置し、前に作成したグラフを表示する簡単な行を記述します。
GraphLayout.Graph = graph

そして、それは私たちが必要とするすべてです。 残りはグラフ#で処理されます。

画像

参照:
クイックグラフ
グラフ番号

Source: https://habr.com/ru/post/J111214/


All Articles