API địa chỉ IP và endpoint dòng lệnh

Lấy địa chỉ IP công khai của bạn từ một script, một shell hoặc một cron job: văn bản thuần cho curl, JSON kèm chi tiết, và các host chỉ IPv4 và chỉ IPv6 khi bạn cần một họ địa chỉ cụ thể. Không key, không tài khoản, 600 yêu cầu mỗi phút cho mỗi địa chỉ.

Cập nhật lần cuối 21 tháng 10, 2026

Bắt đầu nhanh: lấy IP bằng curl

text
curl checkmyip.com/raw
203.0.113.42

Đó là toàn bộ API cho hầu hết nhu cầu: một yêu cầu, địa chỉ, một dấu xuống dòng. curl -4 và curl -6 ép một họ địa chỉ; curl checkmyip.com/json trả về các chi tiết bên dưới. Bất kỳ client nào gửi Accept: text/plain hoặc User-Agent dạng dòng lệnh đều nhận địa chỉ trần từ /raw; trình duyệt nhận trang cho người đọc.

shell · live
$ curl checkmyip.com
216.73.216.52
$ curl -H "Accept: text/plain" https://checkmyip.com/
216.73.216.52

Endpoint

EndpointTrả vềGhi chú
GET https://checkmyip.com/rawIP của bạn dạng văn bản thuần kèm dấu xuống dòng cuốicũng là GET / với User-Agent của curl/wget/PowerShell
GET https://checkmyip.com/ip · /ip.txtcùng địa chỉ văn bản thuần (bí danh cho các script quen dùng những đường dẫn đó)Cache-Control: no-store
GET https://checkmyip.com/jsonJSON: ip, version, geo, network, type, tóm tắt risk (các trường bên dưới)Cache-Control: private, no-store
GET https://checkmyip.com/json?ip=203.0.113.42cùng JSON đó cho bất kỳ địa chỉ công khai nàocùng giới hạn 600/phút
GET https://ipv4.checkmyip.com/ip{ip, family: 4, …} chỉ qua IPv4thất bại nếu bạn không có đường IPv4
GET https://ipv6.checkmyip.com/ip{ip, family: 6, …} chỉ qua IPv6thất bại nếu bạn không có đường IPv6
GET https://ds.checkmyip.com/iphọ địa chỉ mà client của bạn ưu tiên khi cả hai đều hoạt động?format=text để nhận kết quả trần

Mọi endpoint đều trả lời qua HTTPS với CORS bật cho mục đích chỉ đọc, gửi Cache-Control: no-store, và được đánh dấu noindex với công cụ tìm kiếm. Kết quả cho các địa chỉ khác được lưu đệm mười phút.

GEThttps://checkmyip.com/raw
Plain text: your address + newline.
GEThttps://checkmyip.com/ip
Alias of /raw.
GEThttps://checkmyip.com/ip.txt
Alias of /raw with a file extension, for tools that want one.
GEThttps://checkmyip.com/
Plain text when the User-Agent is curl, wget, PowerShell or another non-browser, or when Accept: text/plain is sent; the HTML page otherwise.
GEThttps://checkmyip.com/json
JSON for your own address: live Cloudflare edge data, enriched by the lookup service within an 800 ms budget.
GEThttps://checkmyip.com/json?ip=203.0.113.9
JSON for any public address (lookup service). 503 with an error body when the service is unreachable — never guessed data.

All of them send Cache-Control: private, no-store, Access-Control-Allow-Origin: * and X-Robots-Tag: noindex; không cần api key.

Các trường trong phản hồi JSON

ip — địa chỉ dạng chuỗi. version — 4 hoặc 6. geo.consensus — country (ISO 3166-1 alpha-2), region, city, lat, lon, timezone, confidence (0–1), disagreement (boolean), anycast (boolean); geo.sources[] — câu trả lời của từng cơ sở dữ liệu kèm updated, licence và attribution. network — asn, as_name, as_org, prefix, rir, allocation_date, registry_country, abuse_contacts[]. hostname — tên PTR hoặc null. type.type — residential, mobile, business, datacenter hoặc unknown, kèm confidence và reasons[]. risk — is_proxy, is_vpn, is_tor, is_datacenter, is_relay, score (0–100), level, reasons[], blacklists[] và score_version. Giá trị thiếu là null kèm lý do trong status hoặc note; các kết luận heuristic được ghi rõ là vậy. Các chuỗi ghi công phải được hiển thị nếu bạn hiển thị dữ liệu định vị cho người dùng (điều kiện CC BY 4.0 / CC BY-SA 4.0).

Two fields are additive on top of the list above: schema_version (the lookup service's response schema, 1.1 today; fields are only ever added) and geo.agreement — the per-field tally behind the consensus (country_sources, country_source_ids, city_sources, city_source_ids, the disagreeing ids and a one-line summary such as “country confirmed by 3 sources, city from 2”). network.origins[] lists every ASN that originates the address (asn, as_name, as_org, named_by[], primary; network.multi_origin is true when there is more than one and network.note says which was chosen as primary). risk.factors[] carries the score arithmetic (id, label, points, source; sum = score before the cap at 100) and risk.reasons[] the same signals as full sentences. A tied city vote sets geo.consensus.city to null and lists the options in geo.consensus.city_candidates[]; geo.consensus.tie_break says what rule applied. hosted_domains (full lookups only) is the IP2WHOIS hosted-domain block: status (ok, cached, budget_exhausted with retry_after, no-data, skipped on fast answers), total_domains, domains[] (a sample — the free plan returns one name per page), page/total_pages and the attribution string, which must be shown with the names. Own-address answers also carry colo (the Cloudflare data centre that served you) and cache (live or edge ≤10 min).

Ví dụ mã

Mỗi ví dụ in ra địa chỉ công khai của máy mà nó chạy trên đó.

curl

text
curl -s https://checkmyip.com/raw
curl -s -4 https://checkmyip.com/raw     # chỉ IPv4
curl -s -6 https://checkmyip.com/raw     # chỉ IPv6
curl -s https://checkmyip.com/json | jq .geo.consensus.country

wget

text
wget -qO- https://checkmyip.com/raw

PowerShell

text
(Invoke-WebRequest -Uri https://checkmyip.com/raw -UseBasicParsing).Content.Trim()
(Invoke-RestMethod -Uri https://checkmyip.com/json).network.asn

Python

text
import urllib.request
ip = urllib.request.urlopen("https://checkmyip.com/raw", timeout=5).read().decode().strip()
print(ip)

JavaScript (fetch)

text
const r = await fetch("https://checkmyip.com/json", { cache: "no-store" });
const { ip, geo } = await r.json();
console.log(ip, geo.consensus.country);

Go

text
resp, err := http.Get("https://checkmyip.com/raw")
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(strings.TrimSpace(string(b)))

Script Bash và cron

text
#!/bin/sh
# báo khi IP công khai thay đổi (chạy từ cron mỗi 5 phút)
new=$(curl -fsS --max-time 5 https://checkmyip.com/raw) || exit 0
old=$(cat /var/tmp/public-ip 2>/dev/null)
[ "$new" != "$old" ] && { echo "$new" > /var/tmp/public-ip; logger "public IP changed: $old -> $new"; }

Hãy dùng --max-time, coi một lần thất bại là không rõ thay vì đã đổi, và đừng hỏi thường xuyên hơn một lần mỗi phút.

Giới hạn tần suất và sử dụng hợp lý

/raw, /ip, /ip.txt, /json, /json?ip= và các host /ip theo họ địa chỉ cho phép 600 yêu cầu mỗi phút cho mỗi địa chỉ; công cụ check port cho phép 20 mỗi phút và chỉ kiểm tra địa chỉ của chính người gọi. Vượt giới hạn trả về HTTP 429 kèm phần thân lỗi JSON. Các endpoint miễn phí cho mục đích cá nhân, nội bộ và thương mại trong các giới hạn này; nếu bạn dự kiến lưu lượng liên tục cao hơn, hoặc muốn nhúng dữ liệu của chúng tôi vào một sản phẩm, hãy báo trước qua trang liên hệ. Vui lòng đừng dùng các trang cho người đọc từ script — chúng nặng và chậm hơn các endpoint ở trên.

Thời gian hoạt động và trạng thái

Các endpoint chạy trên cùng mạng biên với trang và được giám sát liên tục; endpoint /healthz của máy chủ kiểm tra báo phiên bản và thời gian hoạt động của nó. Một trang trạng thái công khai đang được lên kế hoạch. Thay đổi về định dạng phản hồi được thông báo trước trên trang này; các trường hiện có không bao giờ bị đổi tên, chỉ được thêm.

Câu hỏi thường gặp

Có API IP miễn phí không?

Có. Các endpoint trên trang này trả về địa chỉ công khai của bạn dạng văn bản thuần hoặc JSON mà không cần key hay tài khoản, trong giới hạn tần suất ở trên, và /json?ip= trả về cùng JSON đó cho bất kỳ địa chỉ công khai nào. Trang tra cứu địa chỉ IP hiển thị cùng dữ liệu cho người đọc.

IP grabber có phạm pháp không?

“IP grabber” là một liên kết hoặc hình ảnh ghi lại địa chỉ của bất kỳ ai mở nó. Ghi log địa chỉ của khách truy cập trang của chính bạn là hợp pháp và thông thường; lừa ai đó để lộ địa chỉ nhằm quấy rối, định vị hay tấn công họ là lúc pháp luật can thiệp. Các endpoint của chúng tôi chỉ trả về địa chỉ của client gọi chúng.

API có địa chỉ IP không?

Mọi máy chủ trả lời một API đều có địa chỉ IP, kể cả của chúng tôi. Câu hỏi thường ẩn sau câu này — “một chương trình có thể biết địa chỉ công khai của chính nó không?” — chính là điều các endpoint này dành cho: chương trình hỏi chúng tôi, và chúng tôi trả lời bằng địa chỉ mà chúng tôi thấy yêu cầu đến từ.

API địa chỉ IP của tôi là gì?

Đó là một endpoint web trả lời bằng địa chỉ của bất kỳ ai gọi nó. https://checkmyip.com/raw trả về dạng văn bản và https://checkmyip.com/json kèm chi tiết vị trí, mạng và rủi ro, như mô tả ở trên.

curl ifconfig.me làm gì?

ifconfig.me là một trang khác trả về địa chỉ của người gọi khi được tải bằng curl. curl checkmyip.com/raw làm điều tương tự ở đây; endpoint JSON còn cho bạn thêm các trường mạng và vị trí.

Làm sao xem địa chỉ IP của tôi bằng curl?

Chạy curl -s https://checkmyip.com/raw trong bất kỳ terminal nào có Internet. Thêm -4 hoặc -6 để ép IPv4 hoặc IPv6. Kết quả là địa chỉ theo sau bởi một dấu xuống dòng, nên an toàn để dùng trong script.

ifconfig.me có an toàn không?

Chúng tôi không thể bảo đảm cho dịch vụ khác. Với dịch vụ của chúng tôi: yêu cầu được trả lời mà không lưu địa chỉ của bạn, phản hồi được phục vụ qua HTTPS, và chính sách quyền riêng tư áp dụng cho các endpoint đúng như cho các trang.