Insbesondere für Knoten heißt es in der Dokumentation für die http-Serverkomponente unter Ereignisverbindung :
[Ausgelöst], wenn ein neuer TCP-Stream eingerichtet wird. Der Socket [The] ist ein Objekt vom Typ net.Socket. Normalerweise möchten Benutzer nicht auf dieses Ereignis zugreifen. Insbesondere gibt der Socket keine lesbaren Ereignisse aus, da der Protokollparser eine Verbindung zum Socket herstellt. Auf die Steckdose kann auch unter zugegriffen werden request.connection
.
Das heißt also, es request.connection
handelt sich um einen Socket, und gemäß der Dokumentation gibt es tatsächlich ein socket.remoteAddress- Attribut, das gemäß der Dokumentation lautet:
Die Zeichenfolgendarstellung der Remote-IP-Adresse. Zum Beispiel '74 .125.127.100 'oder' 2001: 4860: a005 :: 68 '.
Unter Express ist das Anforderungsobjekt auch eine Instanz des Node http-Anforderungsobjekts, daher sollte dieser Ansatz weiterhin funktionieren.
Unter Express.js hat die Anforderung jedoch bereits zwei Attribute: req.ip und req.ips
req.ip
Geben Sie die Remote-Adresse zurück oder, wenn "Trust Proxy" aktiviert ist - die Upstream-Adresse.
req.ips
Wenn "Trust Proxy"true
aktiviert ist , analysieren Sie die IP-Adressliste "X-Forwarded-For" und geben Sie ein Array zurück. Andernfalls wird ein leeres Array zurückgegeben. Wenn der Wert beispielsweise "client, proxy1, proxy2" wäre, würden Sie das Array ["client", "proxy1", "proxy2"] erhalten, wobei "proxy2" am weitesten stromabwärts liegt.
Es kann erwähnenswert sein, dass der Express nach meinem Verständnis req.ip
ein besserer Ansatz ist als req.connection.remoteAddress
, da er req.ip
die tatsächliche Client-IP enthält (vorausgesetzt, dass der vertrauenswürdige Proxy in Express aktiviert ist), während der andere möglicherweise die IP-Adresse des Proxys enthält (falls vorhanden) einer).
Aus diesem Grund schlägt die derzeit akzeptierte Antwort vor:
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress;
Das req.headers['x-forwarded-for']
wird das Äquivalent von Express sein req.ip
.