外网ip地址网站代码

 人参与 | 时间:2026-10-17 07:26:01

打开浏览器,外网网站输入“ip.cn”,地址代码页面顶部会直接显示你当前的外网网站公网IP地址和地理位置。这个动作背后,地址代码是外网网站一段不到20行的PHP代码在干活。我去年帮朋友搭一个访问统计工具,地址代码需要记录访客的外网网站真实出口IP,结果发现市面上不少免费接口要么返回格式混乱,地址代码要么偷偷在JSON里塞广告字段。外网网站干脆自己写一个。地址代码

获取外网IP的外网网站核心逻辑不复杂:服务器端无法直接知道客户端的公网地址,得靠第三方服务回传。地址代码常见做法是外网网站调用一个外部API,比如 ipify、地址代码ip-api 或者国内的外网网站 ip.taobao.com。但如果你自己写网站代码,最稳妥的方式是用 cURL 去请求一个纯文本返回IP的端点,然后过滤掉多余字符。下面这段PHP函数我用了快两年,没出过岔子:

function getPublicIp() {  $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.ipify.org"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 3); $ip = curl_exec($ch); curl_close($ch); if (filter_var($ip, FILTER_VALIDATE_IP)) {  return $ip; } return "unknown"; } 

注意那个超时设置。3秒足够,再长用户就等得不耐烦了。另外别用 file_get_contents,某些虚拟主机禁用了远程打开,cURL 兼容性更好。

拿到IP只是第一步。真正让代码有用的是把它和地理位置、运营商信息绑在一起。ip-api.com 的免费接口每天限1000次请求,返回JSON里包含国家、城市、ISP。我一般把IP和这些字段一起塞进数据库,方便后续做访问来源分析。有个细节:IPv6地址长度是IPv4的四倍,数据库字段至少给 varchar(45),别用 char(15) 把自己坑了。

前端展示反而更简单。一个 <span id="ip-display"></span>,配合 fetch 调用你自己的后端接口,几行JS就能实时刷新。我习惯加一个“复制”按钮,因为很多用户需要把IP粘贴到防火墙白名单里。按钮的点击事件里用 navigator.clipboard.writeText(),比老的 document.execCommand 干净。

有个坑我踩过:某些CDN(比如Cloudflare)会修改 REMOTE_ADDR,你拿到的可能是CDN节点IP而不是用户真实IP。这时候得读 HTTP_CF_CONNECTING_IP 或者 X-Forwarded-For 头。但后者可以被伪造,所以只适合做参考,别拿来做安全拦截。我自己的统计工具里,如果检测到 HTTP_X_FORWARDED_FOR,会同时记录 REMOTE_ADDR,两个都存,后面分析时再判断。

代码写到最后,其实最麻烦的是错误处理。API挂了怎么办?返回超时怎么办?我的做法是加一个本地缓存文件,每10分钟才真正请求一次外部接口,其余时间读缓存。这样即使第三方服务临时抽风,页面也不会空白。缓存文件用 sys_get_temp_dir() 存,别放网站根目录,免得被人直接下载。

如果你只想快速验证自己的外网IP,不用写代码,命令行一句 curl ifconfig.me 就够了。但要做成网站功能,还是得把上面这些零碎逻辑串起来。我见过有人用纯前端JS调 https://api.ipify.org?format=json,也能跑,但暴露了API密钥不说,还容易被浏览器跨域策略卡住。后端代理一层,省心得多。

顶: 63589踩: 39