667 字
3 分钟
如何纯前端获取访客的IP信息
2025-10-19
gemini-aiAI 摘要
Gemini 2.5 Pro

之前在其他博客上看到过一种访客信息卡片,不仅能显示访客的 IP 地址,还能展示所在国家、城市、运营商等信息,看起来非常酷炫,令人心生羡慕。于是我也想在自己的静态博客(基于 Astro)中实现类似功能。

然而,静态网站没有后端支持,无法直接获取访客的 IP 地址。虽然 Netlify Functions 等方案或许可以解决这个问题,但目前我对这类服务还不太熟悉。因此,问题就转化为了:

如何在纯前端(仅使用 HTML/JavaScript)获取访问者的公网 IP 并展示相关信息?


纯前端获取公网 IP 的可行方案#

在纯前端环境中,获取访客公网 IP 目前主要有两种方式:

  1. 通过第三方 API 接口
    这是最常用、最可靠的方式。只需向特定的公开 API 发起请求,即可获得访客的公网 IP,部分服务还能返回地理位置、运营商、时区等丰富信息。

  2. 通过 WebRTC 技术
    通过 WebRTC 的 ICE(Interactive Connectivity Establishment)流程,可以在浏览器中直接获取用户的 IPv4 和 IPv6 地址,而无需依赖服务器。但某些浏览器可能会限制 WebRTC 的功能,导致无法获取。

因此,我最终选择了调用第三方 IP 查询 API 的方案。这类 API 不仅简单易用,还能提供额外的地理位置信息,非常适合用于构建访客信息卡片。


常用第三方 IP 查询 API 推荐#

以下是一些我收集的稳定、免费且无需认证的公共 API:

1. icanhazip.com#

  • 接口地址https://www.icanhazip.com/
  • 示例响应
    223.96.68.4

2. ipify.org#

  • 接口地址https://api64.ipify.org?format=json
  • 示例响应
    {
    "ip": "223.96.68.4"
    }

3. ipinfo.io#

  • 接口地址https://ipinfo.io/json
  • 示例响应
    {
    "ip": "223.96.68.4",
    "city": "Jiaxing",
    "region": "Zhejiang",
    "country": "CN",
    "loc": "30.7522,120.7500",
    "org": "AS24444 Shandong Mobile Communication Company Limited",
    "postal": "314000",
    "timezone": "Asia/Shanghai",
    "readme": "https://ipinfo.io/missingauth"
    }

4. ipapi.co#

  • 接口地址https://ipapi.co/json/
  • 示例响应
    {
    "ip": "223.96.68.4",
    "network": "223.96.0.0/16",
    "version": "IPv4",
    "city": "Jinan",
    "region": "Shandong",
    "region_code": "SD",
    "country": "CN",
    "country_name": "China",
    "country_code": "CN",
    "country_code_iso3": "CHN",
    "country_capital": "Beijing",
    "country_tld": ".cn",
    "continent_code": "AS",
    "in_eu": false,
    "postal": null,
    "latitude": 36.6683,
    "longitude": 116.9972,
    "timezone": "Asia/Shanghai",
    "utc_offset": "+0800",
    "country_calling_code": "+86",
    "currency": "CNY",
    "currency_name": "Yuan Renminbi",
    "languages": "zh-CN,yue,wuu,dta,ug,za",
    "country_area": 9596960,
    "country_population": 1411778724,
    "asn": "AS24444",
    "org": "Shandong Mobile Communication Company Limited"
    }

5. Cloudflare#

  • 接口地址https://www.cloudflare.com/cdn-cgi/trace
  • 示例响应
fl=464f238
h=www.cloudflare.com
ip=223.96.68.4
ts=1760844608.215
visit_scheme=https
uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0
colo=SJC
sliver=none
http=http/2
loc=CN
tls=TLSv1.3
sni=plaintext
warp=off
gateway=off
rbi=off
kex=X25519MLKEM768

小结#

对于静态博客或纯前端项目,借助上述任一 API,即可轻松实现访客信息显示的功能,具体的参数详情如果不懂可以去询问AI。后续等我调试好访客信息卡片我也会写一篇教程,敬请期待!

如何纯前端获取访客的IP信息
https://tianhw.top/posts/client-ip-third-party/
作者
THW
发布于
2025-10-19
许可协议
CC BY-NC-SA 4.0