LoginSignup
0
0

パケットをPythonで分析してみる② 通信先ホスト別のパレート図

Posted at

はじめに

Pythonを使ってネットワークのパケットを分析してみる。
今回はキャプチャーファイル(tcpdumpの結果)から作ったCSVをPythonで読み込み、通信先ホスト(Destination)別にパケットを集計してグラフ化する。管理下のサーバーの通信先の分析などを想定している。
キャプチャーファイルからCSVを作成する方法はこちらを参照。

前提

  • JupyterNotebook
  • 適当なtcpdumpから作ったCSVファイル(サンプルではYahooのトップページにアクセスした際のキャプチャーを使用)

必要なモジュールのインポート

今回使用するモジュールをインポートする。
なお、以降は全てJupyterNotebook上で実行している。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

CSVの読み込み

CSVをデータフレームdfに読み込む。

df = pd.read_csv('test003.csv', index_col=0)

dfの内容を表示してみる。

df

スクリーンショット 2024-04-08 17.17.53.png

通信先ホスト別(Destination)に集計する

データフレームのDestination列を集計してみる。

df.Destination.value_counts()

結果

Destination
192.168.1.58      735
182.22.25.124     243
183.79.250.251    184
183.79.249.124     93
192.168.1.1        85
54.249.167.126     46
34.149.43.113      19
116.118.230.85     15
103.43.90.21       14
113.52.156.18      11
152.195.38.76       7
192.124.249.36      5
34.120.208.123      5
192.124.249.22      4
34.107.221.82       3
34.117.237.239      2
34.107.243.93       2
34.120.115.102      2
Name: count, dtype: int64

これを新しいデータフレームdf2に入れる。

df2=pd.DataFrame(df.Destination.value_counts())

ここで、192.168.1.58は自分のアドレスであるため削除しておく。

df2.drop(index='192.168.1.58', inplace=True)

累積比率(Cumulative_ratio)を計算し、df2に列を追加する。

df2["Cumulative_ratio"]=df2['count'].cumsum() / df2["count"].sum() * 100

この時点でのdf2の内容を表示してみる。

df2

スクリーンショット 2024-04-08 17.22.41.png

パレート図を作成する

df2の内容をもとにパレート図を描画してみる。

fig = plt.figure()
ax = fig.add_subplot(111)

data_num = len(df2)
 
ax.bar(range(data_num), df2["count"])
ax.set_xticks(range(data_num))
ax.set_xticklabels(df2.index.tolist(), rotation=90)
ax.set_xlabel("(Destination)")
ax.set_ylabel("(Packets)")
 
ax_add = ax.twinx()
ax_add.plot(range(data_num), df2["Cumulative_ratio"], color='red')
ax_add.set_ylim([0, 100])
ax_add.set_ylabel("(Percent)")

以下のようなパレート図が出力される。
スクリーンショット 2024-04-08 17.24.52.png

このように、キャプチャーファイル中の通信先ホストをパケット数が多い順に可視化することができた。
なお、通信元(Source)についても同様にグラフ化できる。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0