【问题标题】:How can I get the client IP address with socket.io?如何使用 socket.io 获取客户端 IP 地址?
【发布时间】:2017-12-20 17:38:14
【问题描述】:

我已经搜索了整个 SO,但找不到我的答案。我想通过套接字 io 获取客户端 IP 地址。 v2.0.3 app.js

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

所以这段代码不起作用:

var ip = socket.request.socket.remoteAddress

这个不能用:

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

使用这个 nginx 配置:

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

有没有办法通过socket.io获取客户端IP地址?

【问题讨论】:

  • 当您尝试使用第一个时会得到什么?
  • @Wright: undefined
  • 如果您可以发布一些代码以提供有关您使用它的位置的上下文,这将有所帮助。它对我有用。
  • @Wright:添加了更多代码。我尝试了所有方法(我认为),但我无法获得 IP。

标签: node.js sockets nginx socket.io


【解决方案1】:

我更改了 nginx 配置,问题解决了:

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

sockets.js

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

【讨论】:

    【解决方案2】:

    你可以试试socket.handshake.addresssocket.handshake.address.substr(7)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2012-03-14
      • 2012-02-16
      • 2010-12-11
      • 2016-01-12
      • 2021-07-05
      相关资源
      最近更新 更多