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.connections'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.ipest 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.