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ユーザーは、長いパスのサポートを有効にする必要がある場合があります。
サンプルノートブック
- 新しいノートブックを作成します。例えば、
botnet.ipynb
と呼びましょう。 - 最初のセルを追加し、依存関係をインストールします。
%pip install vulncheck-sdk matplotlib pandas
- 次に、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を使って視覚化するために渡すことができます。次に進みましょう!
- さらにセルを作成し、以下のコードブロックをコピーして実行します。
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()
このようなグラフが表示されるはずです: