web-dev-qa-db-ja.com

ファイル内のIPアドレスから都市の場所を取得する

私が必要としているのは、各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

それを達成することは可能ですか?

4
Juan-Kabbali

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の数と、これを使用する頻度が問題になる可能性があります。

2
jesse_b

地理的な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
1
Rui F Ribeiro