我有合法的业务需求来测试我们的服务器使用虚假IP地址的方式。我们在一堆不同的地方使用request.ip
,我宁愿不用虚假的IP地址替换每个“request.ip”实例,所以我想我只是在应用程序的入口点重新定义它(回调链的开始)。但是,当request.ip
显然将自己更改回“127.0.0.1”时,我遇到了一些意想不到的行为!
这是我在“handle”方法中插入的(CoffeeScript)代码:
spanishIp ='37.35.128.128'
request.ip = spanishIp
console.log "ip: #{request.ip} / #{spanishIp}"
导致以下日志:
ip: 127.0.0.1 / 37.35.128.128
显然,request.ip
被重新定义回我的实际IP地址(127.0.0.1),并将其设置为“37.35.128.128”和console.log语句。
当我将代码进一步移动到回调链中时,它按预期工作。
Node / Express是否有可能在运行时重复将request.ip
设置为用户的实际IP地址?
答案 0 :(得分:2)
试图通过摆弄node / expressjs的核心功能来欺骗ip地址听起来不像是正确的方法。我建议您在应用中启用'trust proxy'
,然后使用X-Forwarded-*
标头欺骗IP地址。有关详细信息,请参阅this。
修改强>
如果您真的想mock
传入请求的IP地址,那么可能值得查看this。同样,我不认为node / expressjs
旨在允许修改req.ip
用于任何目的。
答案 1 :(得分:2)
express中的req.ip属性始终通过函数调用从req.ips数组中提取,并且它是从X-Forwarded-For标头构建的。
https://github.com/strongloop/express/blob/master/lib/request.js#L285-L287
因此,当您要求req.ip时,它总是会从req.ips数组返回值。阿卡,你不能"设置" req.ip属性。如果您需要手动执行任何操作,则需要使用请求正文,例如req.body.ip
。