Node.jsでx-forwarded-forヘッダーを使ってIPアドレスを取得する方法
Node.jsでユーザーのIPアドレスを取得する方法
req.ip プロパティを使う (最も簡単)
req
オブジェクトには、ユーザーのIPアドレスを含むいくつかのプロパティがあります。 最も簡単な方法は、req.ip
プロパティを使うことです。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const ipAddress = req.ip;
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
res.send('Hello World!');
});
app.listen(3000);
この方法は非常に簡単ですが、いくつかの制限があります。
- プロキシサーバーの後ろにいるユーザーの場合、req.ip プロパティはプロキシサーバーのIPアドレスを返します。
- IPv6アドレスには対応していない場合があります。
x-forwarded-for ヘッダーを使う (プロキシサーバーに対応)
x-forwarded-for
ヘッダーには、ユーザーのIPアドレスを含むことがあります。 プロキシサーバーの後ろにいるユーザーの場合、このヘッダーにはプロキシサーバーのIPアドレスだけでなく、ユーザーのIPアドレスも含まれます。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const ipAddress = req.headers['x-forwarded-for'];
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
res.send('Hello World!');
});
app.listen(3000);
- x-forwarded-for ヘッダーは偽造される可能性があります。
- 複数のプロキシサーバーを経由している場合、x-forwarded-for ヘッダーには複数のIPアドレスが含まれます。
ip モジュールを使う (詳細な情報)
ip
モジュールを使うと、ユーザーのIPアドレスに関する詳細な情報を得ることができます。
const ip = require('ip');
const ipAddress = ip.address();
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
const isPublic = ip.isPublic(ipAddress);
console.log(`ユーザーのIPアドレスは公開IPアドレスですか? ${isPublic}`);
この方法は詳細な情報を得ることができますが、ip
モジュールのインストールが必要です。
Node.jsでユーザーのIPアドレスを取得するには、いくつかの方法があります。 それぞれの方法には利点と欠点があるので、用途に合わせて最適な方法を選択する必要があります。
Node.jsでユーザーのIPアドレスを取得するサンプルコード
req.ip プロパティを使う
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const ipAddress = req.ip;
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
res.send('Hello World!');
});
app.listen(3000);
x-forwarded-for ヘッダーを使う
const express = require('express');
const app = express();
app.get('/', (req, res) => {
const ipAddress = req.headers['x-forwarded-for'];
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
res.send('Hello World!');
});
app.listen(3000);
ip モジュールを使う
const ip = require('ip');
const ipAddress = ip.address();
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
const isPublic = ip.isPublic(ipAddress);
console.log(`ユーザーのIPアドレスは公開IPアドレスですか? ${isPublic}`);
Node.jsでユーザーのIPアドレスを取得するその他の方法
os
モジュールを使うと、オペレーティングシステムに関する情報を得ることができます。 これらの情報には、ユーザーのIPアドレスも含まれます。
const os = require('os');
const networkInterfaces = os.networkInterfaces();
for (const name in networkInterfaces) {
const networkInterface = networkInterfaces[name];
for (const address of networkInterface) {
if (address.family === 'IPv4' && !address.internal) {
console.log(`ユーザーのIPアドレス: ${address.address}`);
}
}
}
request
モジュールを使うと、HTTPリクエストを送信することができます。 これらのリクエストを使って、IPアドレスを取得できるサービスにアクセスすることができます。
const request = require('request');
request('https://api.ipify.org', (error, response, body) => {
if (error) {
console.error(error);
return;
}
console.log(`ユーザーのIPアドレス: ${body}`);
});
Cloudflare Workersを使うと、Cloudflareのネットワーク上でコードを実行することができます。 これらのコードを使って、ユーザーのIPアドレスを取得することができます。
addEventListener('fetch', event => {
const request = event.request;
const ipAddress = request.headers.get('CF-Connecting-IP');
console.log(`ユーザーのIPアドレス: ${ipAddress}`);
event.respondWith(new Response('Hello World!'));
});
node.js ip