こんにちは。
Nozomi Networks製品を担当している木村と申します。
Nozomi Networks GuardianにPCAPファイルをアップロードするスクリプトを作ってみましたので紹介したいと思います。
通常、Guardianはネットワークスイッチからトラフィックを入力して使用するものですが、別の方法で取得済みのPCAPファイルを読み込ませることで可視化する機能があります。
GuardianのGUIから簡単にPCAPを読み込ませることができますが、数が多い場合にはスクリプトで自動化すると楽かと思います。
GuardianにはHTTPSで接続可能なAPIが用意されています。PCAPファイルもAPIを使ってアップロード可能です。
今回はPythonでスクリプトを作ってみました。
この記事を執筆した時点では、あまりにも大量のPCAPをアップロードするとエラーが出ることがあります。その場合は、Guardianを再起動すれば再開できます。
import glob
from pickle import FALSE
import requests
import urllib3
from urllib3.exceptions import InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)
import os
import time
# GuardianのIPアドレスを入力
apiURL = "https://xxx.xxx.xxx.xxx/api/open/pcaps/upload"
apiURL2 = "https://xxx.xxx.xxx.xxx/api/open/pcaps"
# Guardianのログインアカウントを入力
apiUsername = "xxxx"
apiPassword = "xxxx"
# PCAPの保存先フォルダーを指定
files = glob.glob("C:/Upload PCAPs/*")
f = open('./error.log', 'w')
for file in files:
data = {
"file" : open(file, 'rb')
}
# PCAPファイルをGuardianにアップロード
r = requests.post(apiURL, files=data, auth=requests.auth.HTTPBasicAuth(apiUsername, apiPassword), verify=False)
if r.status_code != 200:
f.writelines(file + " upload error statusCode:")
f.writelines(f"{r.status_code}\n")
continue
# PCAPファイルを再生するためにPCAPにセットされたIDを取得
r2 = requests.get(apiURL2, auth=requests.auth.HTTPBasicAuth(apiUsername, apiPassword), verify=False)
if r2.status_code != 200:
f.writelines(file + " get id error statusCode:")
f.writelines(f"{r2.status_code}\n")
continue
resp_dict = r2.json()
l_name = [d.get("filename") for d in resp_dict["result"]]
l_id = [d.get("id") for d in resp_dict["result"]]
basename = os.path.basename(file)
l_name_index = l_name.index(basename)
target_id = l_id[l_name_index]
# PCAPファイルをGuardianで再生
payload = {
"id":target_id,
"use_packet_time": True,
"data_to_reset_before_play": {}
}
r3 = requests.patch(apiURL2, auth=requests.auth.HTTPBasicAuth(apiUsername, apiPassword), verify=False, json=payload)
if r3.status_code != 200:
f.writelines(file + " play error statusCode:")
f.writelines(f"{r3.status_code}\n")
continue
time.sleep(10)
f.close()
API仕様などの細かい点はマニュアルを参照いただけますと幸いです。
今年もお世話になりました。良いお年をお過ごしくださいませ。
- カテゴリ:
- Nozomi Networks