我正在尝试在AWS环境中为用户提供私有IP和公共IP。根据此答案(https://stackoverflow.com/a/46021715/4283738),应该有一个标题X-Forwarded-For,分隔的ips以及论坛(https://forums.aws.amazon.com/thread.jspa?threadID=200198)
但是当我通过API Gateway + lambda + nodejs v8部署了我的api时。我已经为事件和上下文变量对JSON进行了调试,以便对nodejs处理函数的参数进行调试(https://y0gh8upq9d.execute-api.ap-south-1.amazonaws.com/prod),但我没有获得私有ip。
lambda函数为
const AWS = require('aws-sdk');
exports.handler = function(event, context, callback){
callback(null, {
"statusCode": 200,
"body": JSON.stringify({event,context})
});
}
API网关详细信息
GET-集成请求
集成类型-Lambda函数
使用Lambda代理集成-True
功能API:https://y0gh8upq9d.execute-api.ap-south-1.amazonaws.com/prod
答案 0 :(得分:2)
情况1:出于安全原因,您无法获得用户的私有IP(如果由用户配置,则是通过NAT或PAT(屏幕后面的网络地址转换或端口地址转换)完成的。NAT将添加并在表中发送该IP,并在请求之前发送公共ID或可以说是router-id)。
情况2:如果您的私人IP在这里是多个用户正在使用同一公共网络(WIFI等)。然后,您可以再次定义两个IP,一个是公共IP,对于所有公共IP,但在公共网络内部,它们有另一个IP,该IP在该公共网络内是唯一的。
例如:假设有带有公共IP(1.1.1.1)的WIFI。它有两个用户A和B.值得注意的是,由于他们共享同一个WIFI,因此路由器将只有一个IP(所有公共和公用),但是在该路由器内部,A和B将具有不同的IP,例如192.1.1.1和192.1.1.2,可以称为私有。
在两种情况下,您都只会获得公共IP(位于X-Forwarded-For标头中的位置0)。
您可以在内部获取X-Forwarded-For标头 event.headers.multiValueHeaders。
如果您可以同时访问两者,那么拥有私有和公共ip有什么好处?
要访问AWS VPC专用子网,您也必须使用NAT,并且出于安全原因,客户端将永远不知道实际IP。我要求您再次重新审查您的要求。
答案 1 :(得分:0)
不知道是什么使您陷入困境,如果我错了,请纠正我。 来自Wiki:
X-Forwarded-For(XFF)HTTP标头字段是一种常见的方法,用于标识通过HTTP代理或负载平衡器连接到Web服务器的客户端的原始IP地址。
我在标头中设置了X-Forwarded-For,并使用Postman进行了测试: https://imgur.com/a/8QZEdyH
答案 2 :(得分:0)
“ X-Forwarded-For”标头显示了用户的公共IP。
就这些了。</ p>
内部IP不可见。
仅标头中指示的“公共ip”。