我该如何在控制器中确定给定请求的IP地址?例如(在express中):
app.post('/get/ip/address', function (req, res) {
// need access to IP address here
})
首先,在您的项目中安装{{link1:request-ip
}}。
import requestIp from 'request-ip';
const clientIp = requestIp.getClientIp(req);
console.log(clientIp)
如果您在本地主机上工作,则结果可能会显示::1
,因为::1
是真实的IP地址,也是本地主机的IPV6表示法。
我们可以使用这段代码在Node.js中进行检查
const os = require('os');
const interfaces = os.networkInterfaces();
let addresses = [];
for (var k in interfaces) {
for (var k2 in interfaces[k]) {
const address = interfaces[k][k2];
if ( (address.family === 'IPv4' || address.family === 'IPv6') &&
!address.internal) {
addresses.push(address.address);
}
}
}
console.log(addresses);
我也遇到了同样的问题...虽然我是JavaScript新手,但我通过使用req.connection.remoteAddress解决了这个问题;它给了我IP地址(但是以ipv6格式::ffff.192.168.0.101显示),然后使用.slice删除前7位数字。
var ip = req.connection.remoteAddress;
if (ip.length < 15)
{
ip = ip;
}
else
{
var nyIP = ip.slice(7);
ip = nyIP;
}
ip=(ip.length<15?ip:(ip.substr(0,7)==='::ffff:'?ip.substr(7):undefined))
将替换上面代码中的if... - unsynchronizedfunction getClientIp4(req){ var ip=typeof req==='string'?req:getClientIp(req); return (ip.length<15?ip:(ip.substr(0,7)==='::ffff:'?ip.substr(7):undefined)); }
。它接受先前获取的IP或请求对象作为输入,并返回IP或未定义。 - unsynchronized
req.ip
。 - FrickeFreshlocalhost
工作的人,下面所有答案的结果几乎都会出现::1
。这让我困惑了一段时间。后来发现::1
是真正的IP地址,是本地主机的IPV6
表示法。希望这能帮助到某些人。 - Pramesh Bajracharyareq.headers['cf-connecting-ip']
- Muhammad Shahzad