我的IP地址

- 定位中... 如需查看您的真实IP地址信息, 请点击查看

终端与系统环境用法

只讲终端怎么用:每个“常用变体”都给出命令 + 解释它解决什么问题(协议栈、输出格式、超时、重试、路径含义)。

macOS / Linux / Raspberry Pi / BSD

终端里最常见的需求是:输出必须干净(一行可复制/可写入/可对比),并且脚本不能卡住。 所以这里的推荐写法默认包含:静默(不污染输出)+ HTTPS(避免走错协议)+ 视情况加超时(避免挂死)。

基础用法(最推荐)

curl -4  my.ipin.io
命令提示符
C:\Users\admin>curl -4 my.ipin.io
171.83.40.149
  • -s:关掉进度条/提示,让输出更纯(脚本里避免混入噪音)。
  • https://:强烈建议写完整协议,避免某些环境默认 http 引发跳转/拦截/端口策略问题。
  • 根路径 /:严格输出 IPv4;拿不到 IPv4 会失败(避免把 IPv6 误当 IPv4 用)。

常用变体(真实工程里最常用的一组)

# A1) 只要 IPv6(用于验证/排查 IPv6)

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

   # A2) 位置简报(终端更好读的文本输出)
   curl -s https://my.ipin.io/info

   # A3) 终端强制拿 JSON(把 UA 改成非 curl)
   curl -s -A "Mozilla/5.0" https://my.ipin.io/info

   # A4) 强制走 IPv4 / 强制走 IPv6(排查系统到底用哪个协议栈去连)
   curl -s -4 https://my.ipin.io
   curl -s -6 https://my.ipin.io/v6

   # A5) 加超时(脚本必备:避免网络抖动卡住)
   curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io

   # A6) 加重试(弱网/偶发抖动:建议 1~2 次)
   curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info

变体解释(你真正需要知道的点)

  • /v6:接口层面只返回 IPv6;用于“明确验证 IPv6 是否可用”。
  • /info:接口层面返回 IP + 位置字段;终端下更偏可读输出,适合“肉眼确认出口”。
  • -A "Mozilla/5.0":输出格式控制。默认 curl 的 UA 含 curl → 服务返回文本;改 UA → 服务返回 JSON。
  • -4/-6:连接层面强制协议栈(让你的客户端只用 v4/v6 去连),常用于定位“为什么我总走 v6”。
  • --connect-timeout:只管“建立连接”阶段;握手/连接慢会在这里中断。
  • --max-time:整次请求总时长上限;自动化里最重要(防挂死)。
  • --retry:提高成功率,但只建议少量重试(1~2)。重试太多会拖慢任务并放大故障。

Android(Termux)

Termux 常见问题:移动网络抖动更大、链路更复杂、协议栈选择更不稳定。 所以建议默认就使用:固定协议栈 + 超时 + 需要时重试

基础用法(推荐)

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

常用变体

# B1) 位置简报(快速确认出口位置)
    curl -s https://my.ipin.io/info

    # B2) IPv6 验证(只在你明确要测 IPv6 时)
    curl -s -6 https://my.ipin.io/v6

    # B3) 弱网:少量重试
    curl -s --retry 2 --connect-timeout 5 --max-time 10 https://my.ipin.io

变体解释

  • -4:你明确要 IPv4 时就固定它,避免环境优先 IPv6 导致结果漂移。
  • /info:移动网络切换出口很常见,用它确认位置是否符合预期最直观。
  • 重试策略:移动网络偶发超时常见,少量重试能显著提高成功率。

Windows(CMD / PowerShell)

Windows 建议把用途分清: CMD/批处理偏向“拿一行文本”;PowerShell偏向“拿 JSON 并直接解析字段”。

基础用法(文本一行 IP)

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

常用变体

# C1) 位置简报(终端可读)
    curl.exe -s https://my.ipin.io/info

    # C2) PowerShell 拿 JSON(适合脚本解析字段)
    Invoke-RestMethod -Uri "https://my.ipin.io/info"

    # C3) IPv6 验证
    curl.exe -s https://my.ipin.io/v6

    # C4) 排查连接(看 DNS、握手、超时原因,输出长)
    curl.exe -v https://my.ipin.io/info

变体解释

  • Invoke-RestMethod:适合 JSON 场景,省掉你手动解析的步骤。
  • -v:只用于排查。它会输出很多调试信息,脚本里不要默认开启。
  • 常见问题来源:系统代理、企业网关、DNS 改写、hosts 规则导致“同命令不同地点表现不同”。

iOS(iSH / 轻量终端)

轻量终端经常只有 wget。注意:wget 默认 UA 往往不含 curl,因此很多时候会拿到 JSON。 你如果要“一行文本”,需要显式设置 UA 触发终端文本输出。

基础用法

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

常用变体

# D1) 位置简报
    wget -qO- https://my.ipin.io/info

    # D2) 强制纯文本(一行 IP)
    wget -qO- -U "curl/8" https://my.ipin.io

    # D3) 强制 JSON(稳定集成)
    wget -qO- -U "Mozilla/5.0" https://my.ipin.io/info

变体解释

  • -qO-:安静 + 输出到 stdout,方便脚本处理。
  • -U:输出格式控制核心开关(UA 含 curl → 文本;UA 非 curl → JSON)。

OpenWRT / 嵌入式设备

嵌入式设备核心目标是:不挂死。所以一定要设置超时。 做“公网 IP 变更检测”时也要避免误判:请求失败不等于 IP 变了。

基础用法(带超时)

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

常用变体

# E1) 位置简报(出口自检)
    wget -qO- --timeout=10 https://my.ipin.io/info

    # E2) 强制纯文本(一行 IP)
    wget -qO- --timeout=10 -U "curl/8" https://my.ipin.io

变体解释

  • --timeout:嵌入式强烈建议默认就带上,避免定时任务卡死。
  • 输出模式稳定:wget 默认可能拿 JSON;若你脚本只想要一行 IP,用 UA 触发文本输出更稳。

Docker / CI / 自动化任务

自动化环境不确定性更大:DNS 波动、短暂超时、出口策略变化都更常见。 推荐默认:超时 + 少量重试 + 固定输出格式(避免解析在不同 runner 上翻车)。

基础用法(加超时)

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

常用变体(CI 最实用)

# F1) 稳定拉取位置(带重试)
    curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info

    # F2) CI 想稳定 JSON:固定 UA 为非 curl
    curl -s -A "Mozilla/5.0" --connect-timeout 3 --max-time 8 https://my.ipin.io/info

    # F3) 排查:强制协议栈
    curl -s -4 https://my.ipin.io
    curl -s -6 https://my.ipin.io/v6

变体解释

  • 固定 UA:CI 里不同镜像/不同工具 UA 可能不同,固定后输出格式才不会漂移。
  • 少量重试:提高成功率,但也要保证失败能快速暴露(便于定位)。

常见问答(FAQ)

Q1:我用 curl -s https://my.ipin.io,为什么有时失败或返回错误?

根路径是“严格 IPv4”:如果当前链路无法获得 IPv4,就会明确失败(而不是给你一个 IPv6 假装成功)。 这通常发生在:IPv6-only 网络、某些代理/网关环境、或你的客户端被强制走 IPv6 且链路没有可用 IPv4。

排查方式:用 curl -s -4 强制走 IPv4;或者改用 /info 看当前出口 IP 是什么,再决定下一步。

Q2:我用 curl 请求 /info,为什么不是 JSON?

因为终端工具默认走“终端输出模式”,/info 在该模式下会输出更易读的文本框。 如果你要 JSON(方便 jq/程序解析),把 UA 改成非 curl 即可。

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

Q3:为什么同一条命令在不同机器上输出格式不一样?

输出格式取决于请求的 User-Agent。不同工具(curl / wget / 某些发行版自带工具)默认 UA 可能不同, 就会导致返回文本或 JSON 的差异。

解决方式:固定 UA。想要文本就让 UA 包含 curl;想要 JSON 就让 UA 不包含 curl。 对自动化/CI 来说,固定 UA 是“稳定解析”的关键。

Q4:为什么我明明只想拿 IPv4,却感觉自己“走了 IPv6”?

这里要区分两件事: 你连接时用的协议栈(客户端选择 v4/v6 去连), 和 接口返回的 IP 类型(由路径 //v6 决定)。

排查建议:用 -4/-6 强制连接协议栈,确认你的网络环境实际偏好哪条链路。 如果你只要 IPv4,使用根路径并必要时强制 -4

Q5:脚本里应该怎么写才不容易误判、不卡死?

推荐组合是:静默(避免噪音)、超时(避免卡死)、少量重试(抗抖动)、 以及失败不覆盖旧值(避免把失败当变化)。

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

Q6:我该优先用 curl 还是 wget?

能用 curl 就用 curl:参数更丰富,排查也更强。 但在轻量/嵌入式环境只有 wget 很常见,用 wget 完全没问题,关键是: 设置超时、输出到 stdout、必要时固定 UA 来锁定输出格式