Node.js如何获取外网访问的IP地址?
Node.js如何获取外网访问的IP地址?
null
写个 api ,返回 ip
访问一下 ip138 得到你的地址吧。
request.connection.remoteAddress
希望你懂。
已经在 stackoverflow 上找到答案了,只是获取的 ip 前有一串::ffff:
https://ifconfig.me/ip
http://members.3322.org/dyndns/getip
http://ns1.dnspod.net:6666
上面是可用的 web 接口,我在用 dnspod 那个.
感谢你的回复。
在Node.js中,获取外网访问的IP地址通常是通过请求头中的信息来推断。这并不意味着可以直接获取到客户端的真实IP,因为很多代理、负载均衡器或用户使用的代理软件会改变请求的源头信息。但以下是一些常见的方法来尝试获取客户端IP:
-
使用
request.socket.remoteAddress
:const http = require('http'); http.createServer((req, res) => { let ip = req.socket.remoteAddress; console.log(`Client IP: ${ip}`); res.end(`Your IP is ${ip}`); });
-
考虑X-Forwarded-For头部(如果信任的话): 这个头部通常由代理服务器添加,包含原始请求者的IP地址。但因为这个值可以被伪造,所以只应在可信的环境下使用。
const http = require('http'); http.createServer((req, res) => { let ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress; console.log(`Client IP (possibly forwarded): ${ip}`); res.end(`Your IP is ${ip}`); });
-
处理可能的多个IP地址(如在X-Forwarded-For中): 当存在多个IP时,通常是客户端IP、然后是各种代理和负载均衡器的IP。
const http = require('http'); http.createServer((req, res) => { const xff = req.headers['x-forwarded-for']; if (xff) { const ips = xff.split(','); // 通常第一个元素是最接近客户端的IP let clientIp = ips[0]; console.log(`Client IP from X-Forwarded-For: ${clientIp}`); res.end(`Your IP is ${clientIp}`); } else { let socketIp = req.socket.remoteAddress; console.log(`Client IP (direct): ${socketIp}`); res.end(`Your IP is ${socketIp}`); } }).listen(8080);
重要的是要注意,由于安全和隐私原因,直接获取真实客户端IP在许多情况下是不可能的,特别是当请求通过多个代理或CDN服务转发时。始终验证和处理这些头部信息以确保安全是至关重要的。同时,不要完全依赖这些信息来做重要的决策,如身份验证和安全检查等。