bashからIPに自分の国をインポートする

bashからIPに自分の国をインポートする

bashスクリプトで現在住んでいる国の名前を使用したいと思います。次のコマンドを使用して外部IPを取得できます。

curl ifconfig.me

しかし、私たちの国の名前はどのようにわかりますか?

答え1

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"
}

答え2

公開whoisデータベースを照会すると、近い情報を得ることができます。考えられるすべての状況を「製品化」するのはやや難しいかもしれませんが、合理的な近似は次のとおりです。

$ whois a.b.c.d | grep -iE ^country:

a.b.c.d問題のIPアドレスはどこにありますか?

whois通常はデフォルトでインストールされるので、「これを行うためにどのパッケージもインストールしたくない」という合理的な解釈に適しています。追加ソフトウェア"。

印刷ただフィールドの値をcountry大文字にのみ強制すると(たとえば、比較を容易にするために)、次のことができます。

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

答え3

ifconfig.me以外のIPロケータを使用してこの情報を提供してください。例:

2015-03-09以降、使用できなくなりました。

curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode'

または:

curl -s 'http://geoiplookup.net/geoapi.php?output=country'

(望むよりAPI詳細)

または:

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

または:

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

より正確に言えば、

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

座標です。

これはページのHTML形式を想定しています。したがって、後でフォーマットを変更することを決定すると、動作が中断される可能性があります。

答え4

他の回答で述べたものに加えてipinfo.io使用することもできます。freegeoip.netこれは公式に公に利用可能なコード/データベースを使用しているようです(必要に応じて独自のインスタンスで実行できます)、要求の数にはより高い制限があるようです。 15k/時間、ipinfo.ioのリクエスト数は1000/日です。

% curl -i ipinfo.io
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 17 Sep 2017 02:17:47 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 240
Vary: Accept-Encoding
x-cloud-trace-context: 86d62d74c999fc62715d7dff810ea16c/9504640995707975809;o=0
Access-Control-Allow-Origin: *
X-Content-Type-Options: nosniff
Via: 1.1 google

{
  "ip": "88.198.54.xx",
  "hostname": "static.88-198-54-xx.clients.your-server.de",
  "city": "Nuremberg",
  "region": "Bavaria",
  "country": "DE",
  "loc": "49.4478,11.0683",
  "org": "AS24940 Hetzner Online GmbH",
  "postal": "90455"
}%
% curl -i freegeoip.net/json/
HTTP/1.1 200 OK
Date: Sun, 17 Sep 2017 02:17:54 GMT
Content-Type: application/json
Content-Length: 230
Connection: keep-alive
Set-Cookie: __cfduid=dacbae017e5ee70d57b251c89c4ba418b1505614674; expires=Mon, 17-Sep-18 02:17:54 GMT; path=/; domain=.freegeoip.net; HttpOnly
Vary: Origin
X-Database-Date: Thu, 07 Sep 2017 04:08:50 GMT
X-Ratelimit-Limit: 15000
X-Ratelimit-Remaining: 14996
X-Ratelimit-Reset: 2697
Server: cloudflare-nginx
CF-RAY: 39f89263d43c6367-FRA

{"ip":"88.198.54.xx","country_code":"DE","country_name":"Germany","region_code":"BY","region_name":"Bavaria","city":"Nuremberg","zip_code":"90455","time_zone":"Europe/Berlin","latitude":49.4478,"longitude":11.0683,"metro_code":0}
%

関連情報