Địa chỉ IP của tôi

- Đang định vị... Để xem thông tin IP thực của bạn, nhấn vào đây

Cách dùng Terminal và môi trường hệ thống

Chỉ nói về cách dùng terminal: mỗi “biến thể thường dùng” đều đưa ra lệnh + giải thích nó giải quyết vấn đề gì (ngăn xếp giao thức, định dạng đầu ra, timeout, retry, ý nghĩa đường dẫn).

macOS / Linux / Raspberry Pi / BSD

Nhu cầu phổ biến nhất trong terminal là: đầu ra phải sạch (một dòng có thể sao chép/ghi/đối chiếu) và script không được bị treo. Vì vậy, cách viết khuyến nghị ở đây mặc định bao gồm: chế độ im lặng (không làm bẩn đầu ra) + HTTPS (tránh dùng nhầm giao thức) + khi cần thì thêm timeout (tránh treo).

Cách dùng cơ bản (khuyến nghị nhất)

curl -4  my.ipin.io
Dấu nhắc lệnh
C:\Users\admin>curl -4 my.ipin.io
171.83.40.149
  • -s: tắt thanh tiến trình/thông báo để đầu ra “thuần” hơn (tránh trộn nhiễu trong script).
  • https://: khuyến nghị mạnh mẽ viết đầy đủ giao thức để tránh một số môi trường mặc định http gây chuyển hướng/chặn/chính sách cổng.
  • Đường dẫn gốc /: xuất строго IPv4; nếu không lấy được IPv4 sẽ thất bại (tránh dùng nhầm IPv6 như IPv4).

Các biến thể thường dùng (nhóm hay gặp nhất trong thực tế)

# A1) Chỉ IPv6 (dùng để xác minh/gỡ lỗi IPv6)

   curl -s https://my.ipin.io/v6

   # A2) Tóm tắt vị trí (đầu ra văn bản dễ đọc hơn trong terminal)
   curl -s https://my.ipin.io/info

   # A3) Buộc lấy JSON trong terminal (đổi UA thành không phải curl)
   curl -s -A "Mozilla/5.0" https://my.ipin.io/info

   # A4) Buộc IPv4 / buộc IPv6 (xác định hệ thống thực sự dùng ngăn xếp nào để kết nối)
   curl -s -4 https://my.ipin.io
   curl -s -6 https://my.ipin.io/v6

   # A5) Thêm timeout (bắt buộc cho script: tránh bị treo do mạng dao động)
   curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io

   # A6) Thêm retry (mạng yếu/dao động ngẫu nhiên: khuyến nghị 1~2 lần)
   curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info

Giải thích các biến thể (những điểm bạn thật sự cần biết)

  • /v6: ở mức endpoint chỉ trả về IPv6; dùng để “xác minh rõ ràng IPv6 có khả dụng không”.
  • /info: ở mức endpoint trả về IP + trường vị trí; trong terminal thiên về đầu ra dễ đọc, phù hợp “xác nhận bằng mắt điểm thoát”.
  • -A "Mozilla/5.0": điều khiển định dạng đầu ra. Mặc định UA của curl có curl → dịch vụ trả về văn bản; đổi UA → dịch vụ trả về JSON.
  • -4/-6: buộc ngăn xếp ở mức kết nối (client chỉ dùng v4/v6 để kết nối), thường dùng để tìm nguyên nhân “vì sao tôi luôn đi v6”.
  • --connect-timeout: chỉ áp dụng cho giai đoạn “thiết lập kết nối”; bắt tay/kết nối chậm sẽ bị cắt tại đây.
  • --max-time: giới hạn thời lượng tối đa của toàn bộ request; quan trọng nhất trong tự động hoá (chống treo).
  • --retry: tăng tỷ lệ thành công, nhưng chỉ nên retry ít (1~2). Retry quá nhiều sẽ làm chậm tác vụ và khuếch đại sự cố.

Android (Termux)

Vấn đề thường gặp trên Termux: mạng di động dao động lớn hơn, đường truyền phức tạp hơn, lựa chọn ngăn xếp giao thức kém ổn định hơn. Vì vậy khuyến nghị mặc định: cố định ngăn xếp + timeout + khi cần thì retry.

Cách dùng cơ bản (khuyến nghị)

curl -s -4 --connect-timeout 5 --max-time 10 https://my.ipin.io

Các biến thể thường dùng

# B1) Tóm tắt vị trí (xác nhận nhanh vị trí điểm thoát)
    curl -s https://my.ipin.io/info

    # B2) Xác minh IPv6 (chỉ khi bạn thật sự muốn test IPv6)
    curl -s -6 https://my.ipin.io/v6

    # B3) Mạng yếu: retry ít lần
    curl -s --retry 2 --connect-timeout 5 --max-time 10 https://my.ipin.io

Giải thích các biến thể

  • -4: khi bạn cần IPv4 rõ ràng thì cố định nó, tránh môi trường ưu tiên IPv6 làm kết quả bị “trôi”.
  • /info: mạng di động hay đổi điểm thoát; dùng nó để xác nhận vị trí có đúng kỳ vọng là trực quan nhất.
  • Chiến lược retry: timeout ngẫu nhiên trên mạng di động rất phổ biến; retry ít lần có thể tăng đáng kể tỷ lệ thành công.

Windows (CMD / PowerShell)

Trên Windows nên tách rõ mục tiêu: CMD/batch thiên về “lấy một dòng văn bản”; PowerShell thiên về “lấy JSON và phân tích trường trực tiếp”.

Cách dùng cơ bản (văn bản một dòng IP)

curl.exe -s https://my.ipin.io

Các biến thể thường dùng

# C1) Tóm tắt vị trí (dễ đọc trong terminal)
    curl.exe -s https://my.ipin.io/info

    # C2) PowerShell lấy JSON (phù hợp để script phân tích trường)
    Invoke-RestMethod -Uri "https://my.ipin.io/info"

    # C3) Xác minh IPv6
    curl.exe -s https://my.ipin.io/v6

    # C4) Chẩn đoán kết nối (xem DNS, bắt tay, lý do timeout; đầu ra dài)
    curl.exe -v https://my.ipin.io/info

Giải thích các biến thể

  • Invoke-RestMethod: phù hợp cho JSON, giúp bỏ qua bước bạn phải tự phân tích thủ công.
  • -v: chỉ dùng để chẩn đoán. Nó sẽ in rất nhiều thông tin debug, không nên bật mặc định trong script.
  • Nguồn lỗi thường gặp: proxy hệ thống, gateway doanh nghiệp, ghi đè DNS, quy tắc hosts khiến “cùng một lệnh nhưng máy khác nhau lại khác kết quả”.

iOS (iSH / terminal nhẹ)

Terminal nhẹ thường chỉ có wget. Lưu ý: UA mặc định của wget thường không có curl, nên nhiều lúc sẽ nhận JSON. Nếu bạn muốn “văn bản một dòng”, bạn cần đặt UA rõ ràng để kích hoạt đầu ra văn bản cho terminal.

Cách dùng cơ bản

wget -qO- https://my.ipin.io

Các biến thể thường dùng

# D1) Tóm tắt vị trí
    wget -qO- https://my.ipin.io/info

    # D2) Buộc văn bản thuần (một dòng IP)
    wget -qO- -U "curl/8" https://my.ipin.io

    # D3) Buộc JSON (tích hợp ổn định)
    wget -qO- -U "Mozilla/5.0" https://my.ipin.io/info

Giải thích các biến thể

  • -qO-: im lặng + xuất ra stdout, thuận tiện cho script xử lý.
  • -U: công tắc cốt lõi để điều khiển định dạng đầu ra (UA có curl → văn bản; UA không phải curl → JSON).

OpenWRT / thiết bị nhúng

Mục tiêu cốt lõi của thiết bị nhúng là: không bị treo. Vì vậy nhất định phải đặt timeout. Khi làm “phát hiện thay đổi IP công khai” cũng cần tránh báo sai: request thất bại không có nghĩa IP đã đổi.

Cách dùng cơ bản (kèm timeout)

wget -qO- --timeout=10 https://my.ipin.io

Các biến thể thường dùng

# E1) Tóm tắt vị trí (tự kiểm tra điểm thoát)
    wget -qO- --timeout=10 https://my.ipin.io/info

    # E2) Buộc văn bản thuần (một dòng IP)
    wget -qO- --timeout=10 -U "curl/8" https://my.ipin.io

Giải thích các biến thể

  • --timeout: thiết bị nhúng nên mặc định luôn kèm theo để tránh tác vụ định kỳ bị treo.
  • Chế độ đầu ra ổn định: wget mặc định có thể nhận JSON; nếu script chỉ muốn một dòng IP, dùng UA để kích hoạt đầu ra văn bản sẽ ổn định hơn.

Docker / CI / tác vụ tự động

Môi trường tự động hoá có độ bất định cao hơn: dao động DNS, timeout ngắn, thay đổi chính sách điểm thoát đều thường gặp. Khuyến nghị mặc định: timeout + retry ít lần + cố định định dạng đầu ra (tránh phân tích bị lỗi trên runner khác nhau).

Cách dùng cơ bản (kèm timeout)

curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io

Các biến thể thường dùng (hữu dụng nhất cho CI)

# F1) Lấy vị trí ổn định (kèm retry)
    curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info

    # F2) CI muốn JSON ổn định: cố định UA là không phải curl
    curl -s -A "Mozilla/5.0" --connect-timeout 3 --max-time 8 https://my.ipin.io/info

    # F3) Chẩn đoán: buộc ngăn xếp giao thức
    curl -s -4 https://my.ipin.io
    curl -s -6 https://my.ipin.io/v6

Giải thích các biến thể

  • Cố định UA: trong CI, các image/công cụ khác nhau có thể có UA khác nhau; cố định để định dạng đầu ra không bị “trôi”.
  • Retry ít lần: tăng tỷ lệ thành công, nhưng cũng phải đảm bảo lỗi lộ ra nhanh (dễ chẩn đoán).

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

Q1: Tôi dùng curl -s https://my.ipin.io — vì sao đôi khi thất bại hoặc trả về lỗi?

Đường dẫn gốc là “IPv4 nghiêm ngặt”: nếu liên kết hiện tại không lấy được IPv4, nó sẽ thất bại rõ ràng (không trả về IPv6 để giả vờ thành công). Điều này thường xảy ra ở: mạng chỉ IPv6, một số môi trường proxy/gateway, hoặc client bị ép dùng IPv6 trong khi đường truyền không có IPv4 khả dụng.

Cách chẩn đoán: dùng curl -s -4 để buộc IPv4; hoặc dùng /info để xem IP điểm thoát hiện tại là gì rồi quyết định bước tiếp theo.

Q2: Tôi dùng curl gọi /info — vì sao không phải JSON?

Vì công cụ terminal mặc định chạy theo “chế độ đầu ra terminal”, /info ở chế độ đó sẽ xuất khung văn bản dễ đọc hơn. Nếu bạn cần JSON (để jq/chương trình phân tích), chỉ cần đổi UA thành không phải curl.

curl -s -A "Mozilla/5.0" https://my.ipin.io/info

Q3: Vì sao cùng một lệnh nhưng trên các máy khác nhau lại cho định dạng đầu ra khác nhau?

Định dạng đầu ra phụ thuộc vào User-Agent của request. Các công cụ khác nhau (curl / wget / công cụ hệ thống) có thể có UA mặc định khác nhau, nên sẽ dẫn đến khác biệt giữa trả về văn bản và JSON.

Cách giải quyết: cố định UA. Muốn văn bản thì để UA chứa curl; muốn JSON thì để UA không chứa curl. Với tự động hoá/CI, cố định UA là chìa khoá cho “phân tích ổn định”.

Q4: Vì sao tôi rõ ràng chỉ muốn IPv4, nhưng lại có cảm giác mình “đi qua IPv6”?

Cần phân biệt hai việc: ngăn xếp dùng khi kết nối (client chọn v4/v6 để kết nối), và loại IP mà endpoint trả về (quyết định bởi đường dẫn / hay /v6).

Khuyến nghị chẩn đoán: dùng -4/-6 để buộc ngăn xếp kết nối, xác nhận môi trường mạng thực sự ưu tiên đường nào. Nếu chỉ cần IPv4, dùng đường dẫn gốc và khi cần thì buộc -4.

Q5: Trong script nên viết thế nào để ít bị báo sai và không bị treo?

Tổ hợp khuyến nghị: im lặng (tránh nhiễu), timeout (tránh treo), retry ít lần (chống dao động), và thất bại thì không ghi đè giá trị cũ (tránh coi thất bại là thay đổi).

curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io

Q6: Tôi nên ưu tiên dùng curl hay wget?

Dùng được curl thì dùng curl: tham số phong phú hơn, khả năng chẩn đoán cũng mạnh hơn. Nhưng trong môi trường nhẹ/nhúng chỉ có wget là rất phổ biến; dùng wget hoàn toàn ổn. Điểm mấu chốt là: đặt timeout, xuất ra stdout, và khi cần thì cố định UA để khoá định dạng đầu ra.