Integrations

Jupyter Notebook

Python SDKを使用して、JupyterノートブックでVulnCheckデータを探索し、可視化します。

Jupyterでは、Markdownとコードを簡単に組み合わせて、ノートブックと呼ばれる統合キャンバスビューにすることができます。Jupyterノートブックでコードを編集して実行するためのツールがいくつかあります。このガイドでは、VSCodeを使用してJupyterノートブックを作成し、Python SDKを使用してVulnCheck APIからデータを取得し、そのデータを使用してグラフを表示する方法を説明します。

VulnCheck の Jupyter Notebook ライブラリ

私たちは、Github でアクセスできる VulnCheck データを使用して構築した Jupyter Notebook のコレクションを維持しています。 https://github.com/vulncheck-oss/jupyter-notebooks

セットアップ

MicrosoftのVSCodeガイド:Jupyterノートブックを確認して、開発環境をセットアップし、Jupyterで作業できる準備を整えましょう。まずは、「Hello, World!」と表示されるセルを実行できるようになるまで学んでください。それができるようになったら、このガイドを続けてください。

Windowsユーザーは、長いパスのサポートを有効にする必要がある場合があります。

サンプルノートブック

  1. 新しいノートブックを作成します。例えば、botnet.ipynbと呼びましょう。
  2. 最初のセルを追加し、依存関係をインストールします。
%pip install vulncheck-sdk matplotlib pandas
  1. 次に、VulnCheck APIからデータを取得するためのセルを追加します。以下のコードブロックをコピーし、TOKENの値を自分のAPIトークンに置き換えて実行します。
import vulncheck_sdk
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd

DEFAULT_HOST = "https://api.vulncheck.com"
DEFAULT_API = DEFAULT_HOST + "/v3"
TOKEN = "insert_token_here"  # ここに実際のAPIトークンを入力してください

configuration = vulncheck_sdk.Configuration(host=DEFAULT_API)
configuration.api_key["Bearer"] = TOKEN

with vulncheck_sdk.ApiClient(configuration) as api_client:
    indices_client = vulncheck_sdk.IndicesApi(api_client)

    api_response = indices_client.index_botnets_get()

    botnet_names = []
    cve_count = []

    for entry in api_response.data:

        # この例では、各ボットネットとそれに関連付けられた一意のCVEの数を確認します。
        botnet_names.append(entry.botnet_name)
        cve_count.append(len(entry.cve))

df = pd.DataFrame({
    'Botnets': botnet_names,
    'Unique CVEs': cve_count
})

このセルを実行すると、すべてのデータがpandasのDataFrameオブジェクトに格納され、matplotlibを使って視覚化するために渡すことができます。次に進みましょう!

  1. さらにセルを作成し、以下のコードブロックをコピーして実行します。
df_sorted = df.sort_values(by='Unique CVEs', ascending=False)
plt.figure(figsize=(10, 6))

plt.bar(df_sorted['Botnets'], df_sorted['Unique CVEs'])

plt.title("ボットネットごとの一意のCVE数")
plt.xlabel("ボットネット")
plt.ylabel("一意のCVE")

plt.xticks(rotation=60, ha='right', fontsize=7, fontweight='bold')

plt.tight_layout()
plt.show()

このようなグラフが表示されるはずです:

Bar Chart

Resources