Mit einem while read
Schleife:
while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt
Dadurch wird die ip_list.txt
durchgelesen Datei und setzen Sie jede Zeile auf den ip
Loop-Variable, dann curl.
Basierend auf Stéphanes Vorschlag habe ich die --fail
hinzugefügt Flag zu curl, damit es bei einem Serverfehler und dem || break
stillschweigend fehlschlägt damit es aus der Schleife ausbricht. ipinfo.io erlaubt 50.000 API-Anfragen pro Monat für kostenlose Konten, je nachdem, wie viele IPs Sie haben und wie oft Sie diese verwenden möchten, kann dies ein Problem für Sie sein.
Für die Suche nach geografischen IP-Adressen bevorzuge ich normalerweise die Verwendung der geoIP-Datenbank von MaxMind. Es ist schneller, da es keine Internetverbindung für jede IP-Adresse benötigt, da es eine lokale Datenbank verwendet, und es gibt keine Beschränkungen für die Anzahl der Anrufe.
Wenn in Debian, als Voraussetzung, installieren Sie die Pakete:
sudo apt-get install geoip-bin geoip-database-extra
Führen Sie dann das Skript aus:
while read -r ip; do geoiplookup $ip | awk -F, ' /City/ { print $5 } ' \
; done < ip_list.txt > cities.txt