while read
の使用 ループ:
while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt
これは ip_list.txt
まで読み取ります ファイルを開き、各行を ip
に設定します 変数をループしてから、それをカールします。
ステファンの提案に基づいて、 --fail
を追加しました サーバーエラーと || break
ループから抜け出せるように。 ipinfo.io では、無料アカウントで 1 か月あたり 50,000 件の 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