ShodanのAPI https://developer.shodan.io/api を使用して、現在のネットワークアラートを取得しています。アラートのIDをjqで解析したい。
カールリクエストはcurl -X GET -i https://api.shodan.io/shodan/alert/info?key={API KEY}
です
そのリクエストの出力は次のようにフォーマットされたjsonデータです:
[
{
"name": "Test Alert",
"created": "2017-01-09T21:53:17.104000",
"expires": 0,
"expiration": null,
"filters": {
"ip": [
"198.20.88.870"
]
},
"id": "HKVGCP1WD79Z7W2T",
"size": 1
}
]
curl -X GET -i https://api.shodan.io/shodan/alert/info?key={API KEY} | jq '.id'
を使用すると、次のエラーが発生します。
"parse error: Invalid numeric literal at line 1, column 9"
-i
オプションは、JSON形式ではないhttp応答ヘッダーがcurlに含まれることを意味します。これが解析エラーの原因ですが、指定したjsonを指定すると、[]
を使用して配列を反復するように指示する必要があります。
curl 'https://api.shodan.io/shodan/alert/info?key={API KEY}' | jq '.[].id'
代わりに(そしてIMOより直感的に) json を使用:
curl 'https://api.shodan.io/shodan/alert/info?key={API KEY}' | json -a id
さらに、json(1)には-H
オプションがあり、http応答ヘッダーを無視するため、json -Ha id
を使用できます。