
13.2
ラベル付け、重み、経路
277
print tgt_graph
print "Links:"
for i in tgt_graph.links.keys():
dest_links = ' '.join(tgt_graph.links[i].keys())
print '%s: %s' % (i, dest_links)
グラフ構造とグラフ属性
グラフを使い出すと、ネットワークの属性をグラフの属性に関連付けたくなる。例えば、ク
ライアントからサーバへの向きを導入したり、ノード間のトラフィックをリンクの重みとして
表現するなどだ。
私の経験では、このようにグラフを作り込むのは、手間ばかりかかってあまり意味がない。
複雑なグラフ表現を作ろうとするよりは、簡単なグラフから始めてその属性を調べた方がよい。
この点を念頭に置き、生のデータをグラフに変換する際の2つのルールを以下に示す。
通信を定義する
リンクで2つのノード間の通信を表現する。フローデータがあるなら、フローが10 個
以上のパケットを持ちACKフラグがオンのときのみリンクを作るとよい。こうすれば、
スキャンや失敗したログインを取り除ける。
ノードを定義する
ノードはIPアドレスにするべきだろうか? IPアドレスとポートの組み合わせにする
べきだろうか?経験的には、ポートをサービスに
分類し(1024未満は個別のサービス、
それより上はクライアント)、IPアドレスとサービスの組み合わせをノードにするのが
よい。
13.2
ラベル付け、重み、経路
グラ