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

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

AIが必要とするのは、各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

これは可能ですか?

答え1

while readループを使用してください。

while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt

ip_list.txtその後、ファイルを読み取り、各行をipループ変数に設定してからカールします。

Stéphaneの提案に従って、--failサーバーでエラーが発生した場合は自動的に失敗し、|| breakループから外れるようにカールにフラグを追加しました。 ipinfo.ioは無料アカウントに月50,000のAPIリクエストを許可するため、保有しているIPの数と使用頻度によってはこれが問題になる可能性があります。

答え2

地理的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

関連情報