Ryan Zygg
Ryan Zygg

Reputation: 341

Getting client hostname in Node.js

is it possible to get hostname in Node.js?

This is how I get client's IP:

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

So, how do I get client's hostname?

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

Thanks for reply!

Upvotes: 8

Views: 25817

Answers (6)

Hitesh Kumar
Hitesh Kumar

Reputation: 373

You can get hostname from the os module:

var os = require("os"); 
os.hostname();

Upvotes: -1

Kirill
Kirill

Reputation: 178

You can also achieve the same if you're using socket.io in the following manner:

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

Upvotes: 0

Raja
Raja

Reputation: 3627

if you are using express,

then you can do as follows,

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);
});

Upvotes: -1

Prestaul
Prestaul

Reputation: 85224

You can use the 'dns' module to do a reverse dns lookup:

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

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

Upvotes: 16

peleteiro
peleteiro

Reputation: 338

I think this might help you. That's not exactly the client hostname but the ip address.

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

Upvotes: 14

robertc
robertc

Reputation: 75777

I think the only way you can do it is like this:

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

But I would suggest you don't really need it, it's not like you can do anything useful with the information. If you just want a string to identify with the user's machine then you can make something up.

If what you're really after is the FQDN then I would suggest it's still not really that useful to you, but for that you need Reverse DNS lookup. If you're on a VPS or similar you can probably configure your box to do this for you, but note that it'll likely take a few seconds so it's not a good idea to do it as part of a response. Also note, you'll not be getting the user's machine's FQDN in most cases but that of their router.

Upvotes: 6

Related Questions