Express を使用して着信接続からリモート IP アドレスを取得しようとしています。Web で見つかった一般的な解決策を既に試しました。
- req.headers['x-forwarded-for'] / 結果: 常に未定義
- req.socket.remoteAddress / 結果: 外部アドレスではなく、常にゲートウェイ IP (IE: 192.168.1.1) を取得します。
手がかりはありますか?
自分のマシンの VM でアプリを実行して、これをテストしていますか? もしそうなら、あなたは正しい答えを得ています。プロキシがないため、X-Forwarded-For は空であり、VM がルーティングに使用するホスト マシン上の仮想インターフェイスが表示されます。これは、リクエストの送信元の IP です。
http://th.issh.it/ipで使用したコードを次に示します。
多分それは大文字と小文字を区別していますか?
exports.iptoy = function(req,res) {
var clientip = req.socket.remoteAddress;
var xffip = req.header('X-Forwarded-For');
var ip = xffip ? xffip : clientip;
if(req.params.format == 'json')
res.send({client:clientip,xforwardedfor:xffip});
else
res.send(ip+"\n");
}