NodeJS получает IP-адрес, используемый remoteAddress - PullRequest
3 голосов
/ 25 сентября 2011

У меня есть 3 простых сервера NodeJS, использующих NET, HTTP и UDP.Каждый сервер прослушивает порт X, но имеет несколько IP-адресов.Я хотел бы получить фактический IP-адрес сервера, когда клиент подключается к серверу (IP-адрес, к которому подключен клиент, IP-адрес, который клиент должен был записать для подключения к серверу).

var httpService = http.createServer(function(req, res){
   req.getActualServerAddress();
});
httpService.listen(8000);

var netService = net.createServer(function(socket) {
   socket.getActualServerAddress();
});
netService.listen(8001);

var udpService = dgram.createSocket("udp4");
udpService.on("message", function (msg, rinfo){
   rinfo.getActualServerAddress();
});
udpService.bind(8002);

Thx.

1 Ответ

8 голосов
/ 27 сентября 2011

Если вы не укажете имя хоста, сервер запустится с 0.0.0.0. Таким образом, вы можете не получить желаемый результат [читай Макрейдинг]. Для HTTP вы можете использовать HTTP-заголовок « Host » [обязательный, начиная с HTTP / 1.1], который может оказаться полезным для вашего случая.

Тем не менее, вы можете попробовать:

socket.address()

Возвращает связанный адрес и порт сокета в соответствии с сообщением операционная система. Возвращает объект с двумя свойствами, например {"address": "192.168.57.1", "port": 62053}

Вот пример для tcp:

var netService = require('net').createServer(function(socket) {
 address = netService.address();
 console.log("Stream on %j", socket.address());
 console.log("opened server on %j", address);
});
netService.listen(8001);

Пример для http:

var httpService = require('http').createServer(function(req, res){
console.log("Stream on %j", req.connection.address());
    res.end("Hi");
});
httpService.listen(8000);
...