6

最近、HerokuでExpressとsocket.ioを使用して最初のノードアプリをホストしましたが、クライアントのIPアドレスを見つける必要があります。これまで私は、、を試しましたがsocket.manager.handshaken[socket.id].addresssocket.handshake.addressどちらsocket.connection.addressも正しいアドレスを提供していません。

アプリ: http: //nes-chat.herokuapp.com/(GitHubリポジトリへのリンクも含まれています)

接続されているユーザーのIPを表示するには:http://nes-chat.herokuapp.com/users

誰もが問題が何であるか知っていますか?

4

3 に答える 3

12

クライアントのIPアドレスはX-Forwarded-ForHTTPヘッダーで渡されます。私はテストしていませんが、socket.ioはクライアントIPを決定するときにこれをすでに考慮しているようです。

また、自分でそれをつかむことができるはずです、ここにガイドがあります:

function getClientIp(req) {
  var ipAddress;
  // Amazon EC2 / Heroku workaround to get real client IP
  var forwardedIpsStr = req.header('x-forwarded-for'); 
  if (forwardedIpsStr) {
    // 'x-forwarded-for' header may return multiple IP addresses in
    // the format: "client IP, proxy 1 IP, proxy 2 IP" so take the
    // the first one
    var forwardedIps = forwardedIpsStr.split(',');
    ipAddress = forwardedIps[0];
  }
  if (!ipAddress) {
    // Ensure getting client IP address still works in
    // development environment
    ipAddress = req.connection.remoteAddress;
  }
  return ipAddress;
};
于 2013-01-17T15:56:58.543 に答える
5

あなたは一行でそれを行うことができます。

function getClientIp(req) {
    // The X-Forwarded-For request header helps you identify the IP address of a client when you use HTTP/HTTPS load balancer.
    // http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-for
    // If the value were "client, proxy1, proxy2" you would receive the array ["client", "proxy1", "proxy2"]
    // http://expressjs.com/4x/api.html#req.ips
    var ip = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'].split(',')[0] : req.connection.remoteAddress;
    console.log('IP: ', ip);
}

これをミドルウェアに追加し、IPを独自のカスタムオブジェクトとしてリクエストに添付するのが好きです。

于 2014-05-23T17:58:36.843 に答える
0

以下は私のために働いた。

Var client = require('socket.io').listen(8080).sockets;

client.on('connection',function(socket){ 
var clientIpAddress= socket.request.socket.remoteAddress;
});
于 2014-06-03T02:35:03.013 に答える