私が必要としているのは、各IPアドレスに関連付けられている都市を見つけることです。私は、それらをファイル内に保存しました。
たとえば、ファイルの内容は次のとおりです。
99.203.11.34
99.203.11.37
99.203.11.47
99.203.11.51
99.203.11.77
99.203.11.84
99.228.120.115
99.252.235.47
99.45.74.135
99.72.61.242
99.8.236.39
N ...
M ...
以下を使用して期待される結果を得ることができますが、1つにつき1つです。
$ curl ipinfo.io/<IP>/city
> city name
例えば:
$ curl ipinfo.io/99.72.61.242/city
> Sunrise
私は次のようなものが欲しいです:
$ cat ip_list.txt | xargs curl ipinfo.io/$0/city
それを達成することは可能ですか?
while read
ループの使用:
while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt
これにより、ip_list.txt
ファイルが読み取られ、各行がip
ループ変数に設定されてから、カールされます。
Stéphaneの提案に基づいて、curlに--fail
フラグを追加して、サーバーエラー時にサイレントに失敗するようにし、|| break
を追加して、ループから抜け出しました。 ipinfo.ioでは、無料のアカウントに対して1か月あたり50kのAPIリクエストを許可しているため、IPの数と、これを使用する頻度が問題になる可能性があります。
地理的なIPアドレスの検索には、通常、MaxMindのgeoIPデータベースを使用することを好みます。ローカルデータベースを使用し、呼び出し回数に制限がないため、IPアドレスごとにインターネット接続がないため、高速です。
Debianの場合、前提条件として、パッケージをインストールします。
Sudo apt-get install geoip-bin geoip-database-extra
次に、スクリプトを実行します。
while read -r ip; do geoiplookup $ip | awk -F, ' /City/ { print $5 } ' \
; done < ip_list.txt > cities.txt