En particulier pour le nœud, la documentation du composant serveur http, sous connexion d'événement, indique:
[Déclenché] lorsqu'un nouveau flux TCP est établi. [Le] socket est un objet de type net.Socket. Habituellement, les utilisateurs ne voudront pas accéder à cet événement. En particulier, le socket n'émettra pas d'événements lisibles en raison de la façon dont l'analyseur de protocole se connecte au socket. La prise est également accessible à request.connection
.
Donc, cela signifie qu'il request.connection
s'agit d'un socket et selon la documentation, il y a en effet un attribut socket.remoteAddress qui, selon la documentation, est:
La représentation sous forme de chaîne de l'adresse IP distante. Par exemple, '74 .125.127.100 'ou' 2001: 4860: a005 :: 68 '.
Sous express, l'objet de requête est également une instance de l'objet de requête Node http, donc cette approche devrait toujours fonctionner.
Cependant, sous Express.js, la demande a déjà deux attributs: req.ip et req.ips
req.ip
Renvoyez l'adresse distante, ou lorsque "proxy de confiance" est activé - l'adresse en amont.
req.ips
Lorsque "proxy de confiance" est true
, analyser la liste d'adresses IP "X-Forwarded-For" et retourner un tableau, sinon un tableau vide est retourné. Par exemple, si la valeur était "client, proxy1, proxy2", vous recevrez le tableau ["client", "proxy1", "proxy2"] où "proxy2" est le plus en aval.
Il convient de mentionner que, selon moi, l'Express req.ip
est une meilleure approche que req.connection.remoteAddress
, puisquereq.ip
contient l'IP du client réel (à condition que le proxy de confiance soit activé dans express), tandis que l'autre peut contenir l'adresse IP du proxy (s'il y a une).
C'est la raison pour laquelle la réponse actuellement acceptée suggère:
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress;
Le req.headers['x-forwarded-for']
sera l'équivalent d'express req.ip
.