在bash中通过IP获取我的国家

Rad*_*anu 11 ip internet geolocation

我想在 bash 脚本中使用我现在所在的国家/地区的名称。我可以使用下一个命令获取外部 IP:

curl ifconfig.me
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能得到我的国名呢?

use*_*ser 15

您可以通过查询公共 whois 数据库来了解一些情况。“产品化”以处理所有可能的情况可能有点困难,但合理的近似值可能是:

$ whois a.b.c.d | grep -iE ^country:
Run Code Online (Sandbox Code Playgroud)

a.b.c.d问题的 IP 地址在哪里。

whois通常默认安装,因此这符合对“我不想安装任何软件包来执行此操作”的合理解释,读作“我不想安装其他软件”。

打印country字段的值并强制将其强制为大写(例如,为了使比较更容易),您可以执行以下操作:

$ whois a.b.c.d | awk -F':[ \t]+' 'tolower($1) ~ /^country$/ { print toupper($2) }'
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 14

ipinfo.io有很好的 JSON API 可以从命令行使用:

$ curl ipinfo.io
{
  "ip": "X.X.X.X",
  "hostname": "No Hostname",
  "city": "Hanoi",
  "region": "Ha Noi",
  "country": "VN",
  "loc": "21.0333,105.8500",
  "org": "AS18403 The Corporation for Financing & Promoting Technology"
}
Run Code Online (Sandbox Code Playgroud)

  • 优雅地获取国家代码 [使用`jq`](https://stedolan.github.io/jq/): `curl -s ipinfo.io/ | jq“.国家”`。 (5认同)

Sté*_*las 12

使用除 ifconfig.me 之外的另一个 IP 定位器,该定位器提供该信息,例如:

自 2015-03-09 起不再可用

curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode'
Run Code Online (Sandbox Code Playgroud)

或者:

curl -s 'http://geoiplookup.net/geoapi.php?output=country'
Run Code Online (Sandbox Code Playgroud)

(详情见API

或者:

curl -s http://whatismycountry.com/ |
  sed -n 's|.*,\(.*\)</h3>|\1|p'
Run Code Online (Sandbox Code Playgroud)

或者:

curl -s http://whatismycountry.com/ |
  sed -n 's|.*> *\(.*\)</h3>|\1|p'
Run Code Online (Sandbox Code Playgroud)

为了更精确,或:

curl -s http://whatismycountry.com/ |
  sed -n 's/.*Coordinates \(.*\)<.*/\1/p'
Run Code Online (Sandbox Code Playgroud)

为坐标。

这对页面的 HTML 格式进行了假设。因此,如果他们决定将来更改该格式,它可能会停止工作。