How to find out the remote Address in node.js if it is HTTPS request?

老子叫甜甜 提交于 2019-12-31 23:09:15

问题


HI. in node.js, if it is http request, I can get the remoteAddress at req.connection.remoteAddress,

so, how to get it if https request? I find there is req.socket.remoteAddress but I'm not sure. Please advice. thanks.


回答1:


It appears something is strange/broken indeed. As of node 0.4.7, it seems http has remoteAddress available on:

  • req.connection.remoteAddress
  • req.socket.remoteAddress

on https, both of these are undefined, but

  • req.connection.socket.remoteAddress

does work. That one isn't available on http though, so you need to check carefully. I cannot imagine this behavior is intentional.




回答2:


Since googling "express js ip" directly points to here, this is somehow relevant.

Express 3.0.0 alpha now offers a new way of retrieving IP adresses for client requests. Simply use req.ip. If you're doing some proxy jiggery-pokery you might be interested in app.set("trust proxy", true); and req.ips.

I recommend you to read the whole discussion in the Express Google Group.




回答3:


var ip = req.headers['x-forwarded-for'] || 
     req.connection.remoteAddress || 
     req.socket.remoteAddress ||
     req.connection.socket.remoteAddress;

Note that sometimes you can get more than one ip address in req.headers['x-forwarded-for'], specially when working with mobile phones accessing your server (wifi and carrier data).




回答4:


As well req.headers['x-forwarded-for'] is easily manipulated so you need a properly configured proxy server.

Is better to check req.connection.remoteAddress against a list of known proxy servers before to go with req.headers['x-forwarded-for'].



来源:https://stackoverflow.com/questions/5999379/how-to-find-out-the-remote-address-in-node-js-if-it-is-https-request

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!