如何从控制器内确定给定请求的IP地址?例如(在快递中):
app.post('/get/ip/address', function (req, res) {
// need access to IP address here
})
如何从控制器内确定给定请求的IP地址?例如(在快递中):
app.post('/get/ip/address', function (req, res) {
// need access to IP address here
})
当前回答
如果使用express…
req.ip
我在查这个,然后我想,等等,我用的是快递。咄。
其他回答
var ip = req.headers['x-forwarded-for'] ||
req.socket.remoteAddress ||
null;
请注意,有时您可以在req.headers['x-forwarded-for']中获得多个IP地址。此外,并不总是设置x-forward -for报头,这可能会抛出错误。
该字段的一般格式为:
x-forward -for: client, proxy1, proxy2, proxy3
其中的值是一个逗号+空格分隔的IP地址列表,最左边是原始客户端,每个传递请求的后续代理添加接收请求的IP地址。在本例中,请求通过proxy1、proxy2和proxy3传递。Proxy3显示为请求的远程地址。
这是Arnav Gupta提出的解决方案,Martin在下面的评论中为未设置x-forward -for的情况提出了修复建议:
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.socket.remoteAddress
使用现代JS的建议:
仅在设置时处理x-forward -for,如果设置了,则取第一个地址 其他参数使用可选链接(?.)
const parseIp = (req) =>
req.headers['x-forwarded-for']?.split(',').shift()
|| req.socket?.remoteAddress
console.log(parseIp(req))
// => 127.0.0.1
请求。headers['x-forwarded-for'] || request.connection.remoteAddress . headers['x-forwarded-for'
如果有x-forward -for报头,则使用它,否则使用. remoteaddress属性。
The x-forwarded-for header is added to requests that pass through load balancers (or other types of proxy) set up for HTTP or HTTPS (it's also possible to add this header to requests when balancing at a TCP level using proxy protocol). This is because the request.connection.remoteAddress the property will contain the private IP address of the load balancer rather than the public IP address of the client. By using an OR statement, in the order above, you check for the existence of an x-forwarded-for header and use it if it exists otherwise use the request.connection.remoteAddress.
我在nginx后面使用express和
req.headers.origin
对我有用吗
如果你正在使用Graphql-Yoga,你可以使用以下函数:
const getRequestIpAddress = (request) => { const requestIpAddress = request.request。headers['X-Forwarded-For'] || request.request.connection.remoteAddress . headers['X-Forwarded-For' if (!requestIpAddress)返回null const ipv4 = new RegExp(“(?:(?:25(0 - 5)| 2[0 - 9][0 - 4]|[01]?[0 - 9][0 - 9]?)\){3}(?:25(0 - 5)| 2[0 - 9][0 - 4]|[01]?[0 - 9][0 - 9]?)”) const [ipAddress] = requesttipaddress .match(ipv4) 返回ipAddress }
要求的事情。连接已弃用node@12.12.0。使用req.connection.remoteAddress获取客户端IP可能仍然有效,但不建议使用。
幸运的是,req.socket.remoteAddress自node@0.5.10以来一直存在,是一个完美的替代品:
远程IP地址的字符串表示形式。例如,'74.125.127.100'或'2001:4860:a005::68'。如果套接字被销毁(例如,如果客户端断开连接),值可能是未定义的。