APIにアクセスするためのサンプルプログラム
ここでは 2 つのプログラムを示します。1 つは Python で、もう 1 つは Perl で、実行と API を介したデータへのアクセスを支援します。
これらのプログラムが機能するには、~/.shadowserver.api というファイルが存在し、API キーとシークレットが含まれていることが必要です。例として:
[api]
key = <<API-KEY>>
secret = <<SECRET>>
uri = https://transform.shadowserver.org/api2/
このようなエラーが発生した場合は、クエリが大量のデータを処理していることを意味するため、プログラムのタイムアウトを増やす必要があります。
$ ./call-api.py reports/query '{"report":"united-states", "date":"2020-10-27", "query":{"city":"ashburn"}, "limit":3}' pretty
API Exception: The read operation timed out
詳細については、https://github.com/The-Shadowserver-Foundation/api_utils/wiki を参照してください。
このプログラムは、レポート API を利用して、新しいレポートが処理のためにダウンロードされたときに通知を送信するオプションを備えたファイル システム ツリーを維持します。
キューのオプション:
使用法: report-manager.py /path/to/config.ini [ days ]
オプションの「days」引数は、レポートをダウンロードする過去の日数です。デフォルトは 2 です。
サンプル構成ファイル:
[reports]
directory = /var/tmp/reports
min_disk_free = 512
notifier = none
url_prefix = http://myserver/reports/
[stomp]
server = 127.0.0.1
port = 61613
user = guest
password = guest
queue = /queue/mytest
[redis]
server = 127.0.0.1
port = 6379
;password = guest
queue = mytest
[kafka]
server = 127.0.0.1
port = 9092
queue = mytest
[reports] セクションは必須であり、「directory」キーが含まれている必要があります。
設定:
「notifier」が [reports] セクションで構成されている場合は、一致する名前を持つ追加のセクションが必要です。
設定:
通知エントリは、タイムスタンプ、レポート日付、レポート タイプ、および URI を含む JSON オブジェクトです。
{
"timestamp" : "2022-09-01 11:32:45",
"report_date" : "2022-08-31",
"report_type" : "scan_stun",
"uri" : "http://myserver/reports/2022/08/31/2022-08-31-scan_stun_example_com-asn.csv"
}
新しいダウンロードを 1 時間ごとにチェックする crontab の例:
15 * * * * /opt/shadowserver/report-manager.py /opt/shadowserver/reports.ini