2010-11-23 9 views
8

ist es möglich, Hostname in Node.js zu erhalten?Erhalten Client-Hostname in Node.js

Dies ist, wie ich Client-IP erhalten:

var ip = request.header('x-forwarded-for'); 

So, wie bekomme ich den Hostnamen des Kunden?

var hostname = request.header('???'); 

Vielen Dank für Ihre Antwort!

+2

Was macht Sie denken, dass sie einen haben? :) –

+0

Also nicht jeder hat hostname? –

+1

definitiv nicht, das ist eine Reverse-DNS-Lookup, und jeder kann oder darf nicht haben. –

Antwort

7

ich die einzige Art und Weise denken Sie es so tun kann, ist:

<form method="post" action="/gethostname"> 
    <label for="hostname">What is your hostname?</label> 
    <input type="text" name="hostname" id="hostname"> 
</form> 

Aber ich würde vorschlagen, dass Sie nicht wirklich brauchen es, es ist nicht wie Sie etwas Nützliches mit den Informationen tun. Wenn Sie möchten, dass sich eine Zeichenfolge mit dem Computer des Benutzers identifiziert, können Sie etwas erstellen.

Wenn Sie wirklich nach dem FQDN suchen, dann würde ich vorschlagen, dass es immer noch nicht so nützlich für Sie ist, aber dafür benötigen Sie Reverse DNS lookup. Wenn Sie mit einem VPS oder ähnlichem arbeiten, können Sie Ihre Box wahrscheinlich so konfigurieren, dass dies für Sie erledigt wird. Beachten Sie jedoch, dass es wahrscheinlich einige Sekunden dauern wird. Daher ist es keine gute Idee, dies als Teil einer Antwort zu tun. Beachten Sie auch, dass Sie in den meisten Fällen nicht den FQDN des Computers des Computers erhalten, sondern den des Routers.

+0

:-D Okay, danke! –

15

Ich denke, das könnte Ihnen helfen. Das ist nicht genau der Client-Hostname, sondern die IP-Adresse.

function getClientAddress(req) { 
    return req.headers['x-forwarded-for'] || req.connection.remoteAddress; 
} 
+0

-1 das ist, was das OP jetzt verwendet – Hello71

+4

nicht wahr, es verwendet die Remote-Adresse, wenn die Verbindung nicht proxied war – w00t

+0

Sie sollten das klarer in Ihrem Beitrag machen, aber +1 alle –

0

, wenn Sie Express verwenden,

dann können Sie tun wie folgt,

var express = require("express"); 
var app = express.createServer(); 
app.listen(8080); 

app.get("/", function (req, res){ 
    console.log("REQ:: "+req.headers.host); 
    res.end(req.headers.host); 
}); 
+0

Wie bereits erläutert, hat der Host-Header nicht die korrekten Daten, wenn die Anforderung per Proxy übergeben wurde. – Neuquino

+0

Wenn ich das versuche, enthält 'req.headers.host' den Hostnamen des * Servers * bis zum verwendeten" 8080 "-Port. – Michael

0

Sie können das gleiche auch erreichen, wenn Sie socket.io auf folgende Weise verwenden:

// Setup an example server 
var server = require('socket.io').listen(8080); 

// On established connection 
server.sockets.on('connection', function (socket) { 

    // Get server host 
    var host = socket.handshake.headers.host; 

    // Remove port number together with colon 
    host = host.replace(/:.*$/,""); 

    // To test it, output to console 
    console.log(host); 
}); 
Verwandte Themen