Gewusst wie: abrufen von client-und server-IP-Adresse und port-Nummer in Node.js
Ich habe versucht, suchen viele einen Weg zu finden, um zu wissen, die client-und server-ip-Adresse und port-Nummer. Bisher habe ich gefunden:
- Client-ip - : bekannt durch
req.ip
. - Client-port : ich suchte eine Menge, aber ich konnte Sie nicht finden jede Art und Weise zu finden, diese client-ephemeral port. Nach der Besichtigung der
req
undres
Gegenstände, die ich gefunden, dass manchmalres.connection._peername
enthält die client-ip-Adresse und port-Nummer. Aber dies ist nicht der sichere Weg zu finden, die port-Nummer, weil in manchen Wunsch kann diese Eigenschaft fehlt. Also, was ist der richtige Weg, um wissen über den port ? - Server ip : Hier bin ich daran interessiert zu wissen, die externe oder öffentliche ip-Adresse für den server. Ich habe ein wenig gesucht und ich fand dieses link was nutzt einige externe api zum abrufen der externen ip. Ist es der einzig mögliche Weg, um die externe IP ? Oder gibt es irgendeine andere Weise möglich ?
- Server-port : Es kann bekannt sein, mit
listener.address().port
[Quelle] . Aber kann es sein, bekannt ausreq
oderres
Objekte ? Eigentlich will ich wissen, die port-Nummer innerhalb der middleware, wo ichreq
,res
undnext
nur( im Grundeapp.use(function(req,res,next){...}))
).
InformationsquelleAutor user2805872 | 2016-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich diese vier Werte mit diesen Eigenschaften, wenn Sie eine direkte Verbindung mit dem client (keine proxies in der Art):
Relevant node.js source-code-Zeiger in net.js: https://github.com/nodejs/node/blob/863952ebadd4909a66bb9da7868bf75bbbe1462d/lib/net.js#L608
Hinweis: Während Sie den Zugriff auf diese als die Eigenschaftswerte, sind Sie technisch umgesetzt als Getter. Sie können nicht diese Eigenschaften.
Wenn es server-Infrastruktur, wie z.B. load-Balancer, proxies, etc... vor Ihrem eigentlichen server, die über lokale Werte zurückgeben können den lokalen server, nicht das, was die tatsächliche öffentliche IP/port, den der client ursprünglich verbunden ist. Die einzige Möglichkeit zum abrufen der ursprünglichen öffentliche IP/port werden würde, wenn Ihre Infrastruktur legt die originalen als HTTP-Header (was einige proxies, IP, weiß nicht, ob alle Proxy-Server, port), da Sie nicht vorhanden sind, sind in der aktuellen raw-TCP-Verbindung vom proxy.
Fällen, in denen ein proxy-beteiligt ist, können Sie auch wollen, schauen Sie sich einige HTTP-Header:
Den X-Forwarded-Header kann auch eine Komma-getrennte Liste, wenn es gegangen ist, durch mehrere Proxys wie:
Es ist auch ein standard-header, so wie der RFC-7239 2014:
req.ip
ist das, was Express verwendet für seine internen trust-proxy-handling. Besser zu verwenden, alsreq.connection.remoteAddress
wenn Express verwendet wird. Für den port, wenn der upstream-proxy nicht in der Regel senden diese Informationen.Ich konnte nicht finden die unterstützenden code für
req.ip
also ich war nicht bereit darauf zu Vertrauen, als Vertrauen in die Werte, die ich gefunden ist der aktuelle code für.req.connection
ist dieSocket
Objekt für Ihre http-Anfrage und diese vier Eigenschaften sind Eigenschaften, die von einer TCP-Verbindung in node.js. Express kann etwas tun dazu, aber diese kommen direkt aus der zugrunde liegenden socket-Implementierung. Ja, proxies kann obskuren info über die remote-Verbindung - meine Antwort erwähnt.Richtig, ich war Reaktion auf Ihren Kommentar über upstream-Proxys. Lesen Sie die trust-proxy-Einstellungen hier: expressjs.com/en/api.html Deinem Vorschlag wird nur die unmittelbare Verbindung, die oft gewünscht wird. Allerdings, wenn Sie wissen wollen, was die Wunsch-IP eigentlich ist, und Sie haben einen proxy vor, ist es am einfachsten, einfach darauf zu verlassen, Express' gebaut-im Umgang mit dieser situation.
req.connection.localAddress
wird, geben Sie die lokale IP-Adresse des Servers. Ist es möglich, um die öffentlichen IP-Adresse des Servers in einer ähnlichen Art und Weise ?sollte der server-Seite die IP-Adresse der TCP-Verbindung. Wenn es keinen proxy, der zwischen Ihnen und dem öffentlichen internet, dann sollten Sie Ihre öffentliche IP-Adresse. Wenn es ein proxy ist, dann, dass die Adresse nicht die öffentliche IP-Adresse, da sich die öffentliche IP-Adresse nicht tatsächlich gehören zu Ihrem server. Ich fügte hinzu, mehr info über proxy-Header auf meine Antwort, obwohl ich weiß nicht, ob es die echte öffentliche IP-Adresse, die der client ursprünglich verbunden ist.
InformationsquelleAutor jfriend00