2017-07-15 3 views
0

Ich habe die ganze SO durchsucht, aber ich konnte meine Antwort nicht finden. Ich möchte Client-IP-Adresse mit Socket io erhalten. v2.0.3 app.jsWie bekomme ich die Client-IP-Adresse mit socket.io?

var app = express(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
/// other imports ... 

//with or without this line nothing changes 
io.set('transports', ['websocket']); 
app.use(function(req, res, next) { 
    req.db = db; 
    next(); 
}); 
require('./sockets')(io, db); 

sockets.js

module.exports = function(io, db) { 
    io.on('connection', function(socket) { 
     var ip = socket.request.socket.remoteAddress ; // undefined 
     //var ip = socket.handshake.headers["x-forwarded-for"]; undefined 
     //var ip = socket.handshake.headers["X-Forwarded-For"]; undefined 
    }); 
}); 

sodass dieser Code nicht funktioniert:

var ip = socket.request.socket.remoteAddress 

dieses nicht eather funktioniert:

var ip = socket.handshake.headers["x-forwarded-for"]; 
//var ip = socket.handshake.headers["X-Forwarded-For"]; 

Witz h dieses nginx config:

server { 
    listen 80; 
    server_name example.com; 
    location/{ 
     proxy_pass http://localhost:3000; 
     proxy_set_header X-Forwarded-For $remote_addr; 
    } 
} 

ist es trotzdem, die Client-IP-Adresse mit socket.io zu bekommen?

+0

Was tun Sie, wenn Sie versuchen, die erste mit ? – Wright

+0

@Wright: 'undefined' – smoqadam

+0

Wenn Sie einen Teil des Codes veröffentlichen könnten, um einen Kontext für den Verwendungsort anzugeben, wäre dies hilfreich. Für mich geht das. – Wright

Antwort

0

ich nginx config und das Problem gelöst geändert:

server { 
    listen 80; 
    server_name example.com; 
    set_real_ip_from 10.0.0.0/8; 
    real_ip_header X-Real-IP; 
    real_ip_recursive on; 


    location/{ 
     proxy_pass http://127.0.0.1:3000; 

     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-Proto https; 
    } 
} 

und in sockets.js

module.exports = function(io, db) { 
    io.on('connection', function(socket) { 
     var ip = socket.handshake.headers["x-real-ip"]; 
    }); 
}); 
0

können Sie versuchen, socket.handshake.address oder socket.handshake.address.substr(7)

+0

es funktioniert nicht und gibt mir 'undefined' – smoqadam