[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"$f2eva4ffxzpui9":3},"\u003Ch1 id=\"api-获取客户端公网-ip-地址\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#api-获取客户端公网-ip-地址\">\u003Cspan>[API] 获取客户端公网 IP 地址\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh1>\n\u003Ch2 id=\"1-接口描述\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#1-接口描述\">\u003Cspan>1. 接口描述\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cblockquote>\n\u003Cp>该接口用于网络排障,请在中国法律许可范围内使用.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>接口地址： \u003Ccode>https:\u002F\u002Ftest.wsmdn.top\u002F\u003C\u002Fcode>（本项目公共实例，双栈；另有仅 IPv4 \u002F 仅 IPv6 的实例，见下文）\u003C\u002Fp>\n\u003Cp>请求方法：\u003Ccode>GET\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>用途：\u003Cstrong>原样\u003C\u002Fstrong>返回访问者的公网 IP——纯文本、无 JSON 包裹、无参数、无鉴权、不查任何 IP 库。\u003C\u002Fp>\n\u003Cp>实现是本项目自带的两个边缘函数（任选其一部署，都只做这一件事）：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>形态\u003C\u002Fth>\n\u003Cth>代码\u003C\u002Fth>\n\u003Cth>取 IP 的方式\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Cloudflare Workers\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>serverless\u002Flemon-getip\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>CF-Connecting-IP\u003C\u002Fcode> 请求头\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>EdgeOne Edge Functions\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>serverless\u002Fedgeone-getip\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>request.eo.clientIp\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>两者都返回 \u003Ccode>content-type: text\u002Fplain\u003C\u002Fcode> 并带 \u003Ccode>Access-Control-Allow-Origin: *\u003C\u002Fcode>，所以浏览器里可以直接跨域取、也可以 \u003Ccode>curl\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>按协议栈部署三份\u003C\u002Fstrong>，域名的解析记录决定拿到哪一族的地址：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>用途\u003C\u002Fth>\n\u003Cth>DNS 记录\u003C\u002Fth>\n\u003Cth>行为\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>双栈\u003C\u002Ftd>\n\u003Ctd>A + AAAA\u003C\u002Ftd>\n\u003Ctd>返回客户端\u003Cstrong>实际使用\u003C\u002Fstrong>的那一族地址\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>仅 IPv4\u003C\u002Ftd>\n\u003Ctd>只配 A\u003C\u002Ftd>\n\u003Ctd>强制走 v4 出口，返回 IPv4 地址\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>仅 IPv6\u003C\u002Ftd>\n\u003Ctd>只配 AAAA\u003C\u002Ftd>\n\u003Ctd>纯 IPv6 网络下返回 IPv6 地址；本机没有 IPv6 出口时域名\u003Cstrong>解析不出来\u003C\u002Fstrong>（请求直接失败，而不是返回空）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>本项目公共实例即按此部署：\u003Ccode>4.wsmdn.top\u003C\u002Fcode>（仅 IPv4）、\u003Ccode>6.wsmdn.top\u003C\u002Fcode>（仅 IPv6）、\u003Ccode>test.wsmdn.top\u003C\u002Fcode>（双栈）。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>想把&quot;本机 IP&quot;和&quot;归属地&quot;一次拿全，用同一套体系里的 \u003Ccode>\u002Fv1\u002Flocation\u003C\u002Fcode>（见「获取客户端公网 IP 及位置」），\n它的 \u003Ccode>ip\u003C\u002Fcode> 字段与这里返回的是同一个地址。江苏节点公开实例：\n\u003Ccode>curl https:\u002F\u002Fcn-jiangsu.api-ipw.wsmdn.top\u002Fv1\u002Flocation\u003C\u002Fcode>（无需令牌；该接口没有目标参数，\n只能直连节点，见该页的「公开实例」）。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"2-输入参数\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#2-输入参数\">\u003Cspan>2. 输入参数\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>无。\u003C\u002Fp>\n\u003Ch2 id=\"3-输出参数\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#3-输出参数\">\u003Cspan>3. 输出参数\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>参数名称\u003C\u002Fth>\n\u003Cth>类型\u003C\u002Fth>\n\u003Cth>描述\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>无\u003C\u002Ftd>\n\u003Ctd>String\u003C\u002Ftd>\n\u003Ctd>响应体\u003Cstrong>本身就是\u003C\u002Fstrong>客户端公网 IP 文本，例如 \u003Ccode>223.68.219.100\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>判定要点：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>只有 IP 一个 token，没有换行、没有 JSON 包裹；末尾是否带 \u003Ccode>\\n\u003C\u002Fcode> 取决于边缘平台，取值前先 \u003Ccode>strip()\u003C\u002Fcode>。\u003C\u002Fli>\n\u003Cli>不查库 ⇒ 不会出现 \u003Ccode>&quot;not loaded&quot;\u003C\u002Fcode> 之类的占位串，也没有归属地信息。\u003C\u002Fli>\n\u003Cli>边缘函数按平台提供的客户端地址取值，\u003Cstrong>不解析 \u003Ccode>X-Forwarded-For\u003C\u002Fcode>\u003C\u002Fstrong>：它本身就是直接面向公网的入口。若你在它前面又套了一层自建代理，拿到的是代理地址。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"4-示例\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#4-示例\">\u003Cspan>4. 示例\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"41-curl-获取本机公网-ip\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#41-curl-获取本机公网-ip\">\u003Cspan>4.1 cURL 获取本机公网 IP\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre class=\"shiki vitesse-dark\" style=\"background-color:#121212;color:#dbd7caee\" tabindex=\"0\">\u003Ccode class=\"language-bash\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#758575DD\"># 双栈（返回实际使用的栈）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#80A665\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\"> https:\u002F\u002Ftest.wsmdn.top\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#758575DD\"># 只要 IPv4 \u002F 只要 IPv6\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#80A665\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\"> https:\u002F\u002F4.wsmdn.top\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#80A665\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\"> https:\u002F\u002F6.wsmdn.top\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>输出示例：\u003C\u002Fp>\n\u003Cpre class=\"shiki vitesse-dark\" style=\"background-color:#121212;color:#dbd7caee\" tabindex=\"0\">\u003Ccode class=\"language-text\">\u003Cspan class=\"line\">\u003Cspan>223.68.219.100\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"42-python\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#42-python\">\u003Cspan>4.2 Python\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre class=\"shiki vitesse-dark\" style=\"background-color:#121212;color:#dbd7caee\" tabindex=\"0\">\u003Ccode class=\"language-python\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#758575DD\">#!\u002Fusr\u002Fbin\u002Fpython3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#4D9375\">import\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\"> requests\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#DBD7CAEE\">r \u003C\u002Fspan>\u003Cspan style=\"color:#666666\">=\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\"> requests\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\">get\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">'\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\">https:\u002F\u002Ftest.wsmdn.top\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">'\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#DBD7CAEE\">clientIP \u003C\u002Fspan>\u003Cspan style=\"color:#666666\">=\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\"> r\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\">text\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\">strip\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#B8A965\">print\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#DBD7CAEE\">clientIP\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"43-golang\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#43-golang\">\u003Cspan>4.3 Golang\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre class=\"shiki vitesse-dark\" style=\"background-color:#121212;color:#dbd7caee\" tabindex=\"0\">\u003Ccode class=\"language-go\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#4D9375\">package\u003C\u002Fspan>\u003Cspan style=\"color:#5DA994\"> main\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#4D9375\">import\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#C98A7D77\">\t\"\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">fmt\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#C98A7D77\">\t\"\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">io\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#C98A7D77\">\t\"\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">net\u002Fhttp\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#C98A7D77\">\t\"\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">strings\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#4D9375\">func\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\"> main\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">()\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#BD976A\">\tresp\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">,\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> err\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> :=\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> http\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">Get\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\">https:\u002F\u002Ftest.wsmdn.top\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#4D9375\">\tif\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> err\u003C\u002Fspan>\u003Cspan style=\"color:#CB7676\"> !=\u003C\u002Fspan>\u003Cspan style=\"color:#CB7676\"> nil\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#BD976A\">\t\tfmt\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">Println\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\">获取外网 IP 失败，请检查网络\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#80A665\">\t\tpanic\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">err\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#666666\">\t}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#4D9375\">\tdefer\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> resp\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">Body\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">Close\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#BD976A\">\tbody\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">,\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> _\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> :=\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> io\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">ReadAll\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">resp\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">Body\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#BD976A\">\tclientIP\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> :=\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> strings\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">TrimSpace\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#CB7676\">string\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">body\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#BD976A\">\tfmt\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">Println\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">clientIP\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#666666\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"44-浏览器里直接取cors-已放开\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#44-浏览器里直接取cors-已放开\">\u003Cspan>4.4 浏览器里直接取（CORS 已放开）\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre class=\"shiki vitesse-dark\" style=\"background-color:#121212;color:#dbd7caee\" tabindex=\"0\">\u003Ccode class=\"language-js\">\u003Cspan class=\"line\">\u003Cspan style=\"color:#CB7676\">const\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> ip\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> =\u003C\u002Fspan>\u003Cspan style=\"color:#4D9375\"> await\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\"> fetch\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">'\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D\">https:\u002F\u002Ftest.wsmdn.top\u003C\u002Fspan>\u003Cspan style=\"color:#C98A7D77\">'\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">).\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">then\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">r\u003C\u002Fspan>\u003Cspan style=\"color:#666666\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\"> r\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">text\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">())\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#BD976A\">console\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">log\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">(\u003C\u002Fspan>\u003Cspan style=\"color:#BD976A\">ip\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">.\u003C\u002Fspan>\u003Cspan style=\"color:#80A665\">trim\u003C\u002Fspan>\u003Cspan style=\"color:#666666\">())\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>要判断&quot;当前访问更偏向 IPv4 还是 IPv6&quot;，可以同时取双栈域名与两个单栈域名做对比，\n思路见「JS 检查网络是 IPv4 还是 IPv6」。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"5-错误码\" tabindex=\"-1\">\u003Ca class=\"header-anchor\" href=\"#5-错误码\">\u003Cspan>5. 错误码\u003C\u002Fspan>\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>现象\u003C\u002Fth>\n\u003Cth>说明\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>域名解析失败 \u002F 连接超时\u003C\u002Ftd>\n\u003Ctd>用的是\u003Cstrong>仅 IPv6\u003C\u002Fstrong> 的域名，而本机没有 IPv6 出口。改用双栈或仅 IPv4 的域名\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>返回 \u003Ccode>Unable to determine IP address\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>边缘平台没有提供客户端地址。常见于本地直连调试（\u003Ccode>wrangler dev\u003C\u002Fcode> \u002F EdgeOne 本地调试）或自建前置代理未透传\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>返回的是代理地址\u003C\u002Ftd>\n\u003Ctd>你在边缘函数前面又套了一层代理；该函数只认平台提供的客户端地址，不解析 \u003Ccode>X-Forwarded-For\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>拿到私有地址（如 \u003Ccode>192.168.x.x\u003C\u002Fcode>）\u003C\u002Ftd>\n\u003Ctd>本地\u002F内网调试环境，边缘平台看到的就是内网出口\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n",1790424748172]