Tôi muốn sử dụng tên của quốc gia nơi tôi đang ở trong một tập lệnh bash. Tôi có thể lấy IP bên ngoài bằng lệnh tiếp theo:
curl ifconfig.me
Nhưng làm thế nào tôi có thể có được tên quốc gia của tôi?
Tôi muốn sử dụng tên của quốc gia nơi tôi đang ở trong một tập lệnh bash. Tôi có thể lấy IP bên ngoài bằng lệnh tiếp theo:
curl ifconfig.me
Nhưng làm thế nào tôi có thể có được tên quốc gia của tôi?
Câu trả lời:
Sử dụng công cụ định vị IP khác ngoài ifconfig.me cung cấp thông tin đó như:
Không có sẵn nữa kể từ 2015 / 03-09
curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode'
hoặc là:
curl -s 'http://geoiplookup.net/geoapi.php?output=country'
(xem API để biết chi tiết)
hoặc là:
curl -s http://whatismycountry.com/ |
sed -n 's|.*,\(.*\)</h3>|\1|p'
hoặc là:
curl -s http://whatismycountry.com/ |
sed -n 's|.*> *\(.*\)</h3>|\1|p'
để chính xác hơn, hoặc:
curl -s http://whatismycountry.com/ |
sed -n 's/.*Coordinates \(.*\)<.*/\1/p'
cho tọa độ.
Điều đó làm cho các giả định về định dạng HTML của trang. Vì vậy, nó có thể ngừng hoạt động nếu họ quyết định thay đổi định dạng đó trong tương lai.
curl --silent https://whatismycountry.com/ grep --only-matching --perl-regexp 'Your Country is \K[^<]+'
không.
Bạn có thể đến gần bằng cách truy vấn cơ sở dữ liệu whois công khai. Có thể sẽ hơi khó "sản xuất" để xử lý mọi trường hợp có thể, nhưng một xấp xỉ hợp lý có thể là:
$ whois a.b.c.d | grep -iE ^country:
nơi a.b.c.d
là địa chỉ IP trong câu hỏi.
whois
thường được cài đặt theo mặc định, do đó, điều này đáp ứng một cách giải thích hợp lý về "Tôi không muốn cài đặt bất kỳ gói nào để thực hiện việc này" đọc là "Tôi không muốn cài đặt phần mềm bổ sung ".
Để chỉ in giá trị của country
trường và buộc nó chỉ viết hoa (để làm cho việc so sánh dễ dàng hơn chẳng hạn), bạn có thể làm một cái gì đó như:
$ whois a.b.c.d | awk -F':[ \t]+' 'tolower($1) ~ /^country$/ { print toupper($2) }'
whois $(curl ifconfig.me) | grep -iE ^country: | awk '{print $2}'
cho tôi những gì tôi muốn; cảm ơn!
whois $(curl ifconfig.me) | awk 'tolower($1) ~ /^country:/ { print $2 }'
thay thế.
ipinfo.io có API JSON đẹp để sử dụng từ dòng lệnh:
$ 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"
}
jq
: curl -s ipinfo.io/ | jq ".country"
.
Ngoài việc ipinfo.io
đề cập đến trong câu trả lời khác, bạn cũng có thể sử dụng freegeoip.net
, dường như chính thức sử dụng mã / cơ sở dữ liệu có sẵn công khai (mà bạn có thể chạy trên cá thể của mình, nếu cần) và dường như có giới hạn cao hơn cho số lượng yêu cầu - 15k / giờ, so với 1k / ngày trên ipinfo.io.
% 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}
%