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 ...
다음 명령을 사용하여 예상 결과를 얻을 수 있지만 일대일 기반으로 수행됩니다.
$ 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