2010-11-23 18 views
8

¿es posible obtener nombre de host en Node.js?Obteniendo el nombre de host del cliente en Node.js

Esto es cómo consigo IP del cliente:

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

Así que, ¿cómo consigo el nombre de host del cliente?

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

Thanks for reply!

+2

¿Qué le parece que tienen uno? :) –

+0

Entonces, ¿no todos tienen nombre de host? –

+1

definitivamente no, es una búsqueda DNS inversa, y todos pueden o no tener una. –

Respuesta

7

creo que la única manera de hacerlo es la siguiente:

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

pero sugeriría que realmente no lo necesita, no es que se puede hacer nada útil con la información. Si solo quieres que una cadena se identifique con la máquina del usuario, entonces puedes inventar algo.

Si lo que realmente busca es el FQDN, le sugiero que todavía no es realmente útil para usted, pero para eso necesita Reverse DNS lookup. Si tienes un VPS o similar, probablemente puedas configurar tu casilla para que haga esto por ti, pero ten en cuenta que probablemente demorará unos segundos, por lo que no es una buena idea hacerlo como parte de una respuesta. También tenga en cuenta que no obtendrá el FQDN del equipo del usuario en la mayoría de los casos, sino el de su enrutador.

+0

:-D Bien, ¡gracias! –

15

Creo que esto podría ayudarlo. Ese no es exactamente el nombre de host del cliente, sino la dirección IP.

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

-1 eso es lo que OP usa en este momento – Hello71

+4

no es verdad, usa la dirección remota si la conexión no fue proxiada – w00t

+0

Debe aclarar eso en su publicación, pero +1 de todos modos –

15

Usted puede utilizar el módulo 'dns' para hacer una búsqueda DNS inversa:

require('dns').reverse('12.12.12.12', function(err, domains) { 
    if(err) { 
     console.log(err.toString()); 
     return; 
    } 
    console.log(domains); 
}); 

Ver: http://nodejs.org/docs/v0.3.1/api/all.html#dns.reverse

+0

Esto. es la respuesta. –

0

si está usando expreso,

entonces usted puede hacer como sigue,

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

Como se explicó anteriormente, si la solicitud ha sido proxiada, el encabezado del host no tiene los datos correctos. – Neuquino

+0

Cuando intento esto, 'req.headers.host' contiene el nombre de host del * servidor * hasta el puerto" 8080 "que se está utilizando. – Michael

0

También puede lograr lo mismo si usa socket.io de la siguiente manera:

// 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); 
}); 
Cuestiones relacionadas