从文件内的 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 ...

您可以使用以下命令来获得预期的结果,但一一对应:

$ 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标志添加到curl,以便在服务器发生错误时它会默默地失败,并且|| break它会跳出循环。 ipinfo.io 允许免费帐户每月 50k 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

相关内容