Express.js でクライアントの IP アドレスを取得する
人気のある Node.js フレームワークである Express.js は、Web アプリケーションの構築プロセスを簡素化します。 Express アプリケーション内でクライアントの IP アドレスを取得するには、フレームワークによって提供される req.ip プロパティにアクセスします。ただし、アプリケーションがプロキシまたはロード バランサーの背後にあるシナリオでは、クライアントの IP が X-Forwarded-For ヘッダーに格納される可能性があります。このような場合にクライアントの IP を正確に取得するには、次のアプローチを検討してください:
const express = require('express'); const app = express(); app.use((req, res, next) => { const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress; console.log(`Client IP: ${clientIp}`); next(); }); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
この設定では、ミドルウェア関数は、X-Forwarded-For ヘッダーが存在する場合は、そこからクライアントの IP アドレスを取得します。それ以外の場合は、req.connection.remoteAddress に戻ります。これにより、アプリケーションのデプロイメント環境に関係なく、正しい IP アドレスを確実に取得できます。
IPQuery による IP データの拡張
クライアントの IP アドレスを取得したら、このデータを地理位置情報とリスク評価情報で強化することで、貴重な洞察を得ることができます。 IPQuery は開発者向けに設計された堅牢な API で、VPN 検出、位置情報、脅威インテリジェンスなどの機能を提供します。 IPv4 と IPv6 の両方をサポートする IPQuery は、低遅延で高速なルックアップを実現するため、リアルタイム アプリケーションに最適です。
Express アプリケーションでの IPQuery のセットアップ
IPQuery を Express アプリケーションに統合するには、次の手順に従います。
Axios は、HTTP リクエストを容易にする Node.js 用の Promise ベースの HTTP クライアントです。 npm:
を使用してインストールします。
npm install axios
IPQuery API にリクエストを送信し、レスポンスを処理する関数を開発します。
const axios = require('axios'); async function getIpInfo(ip) { try { const response = await axios.get(`https://api.ipquery.io/${ip}?format=json`); return response.data; } catch (error) { console.error(`Error fetching IP information: ${error}`); return null; } }
getIpInfo 関数を利用するように Express ミドルウェアを変更します。
app.use(async (req, res, next) => { const clientIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress; const ipInfo = await getIpInfo(clientIp); if (ipInfo) { console.log(`Client IP: ${clientIp}`); console.log(`Location: ${ipInfo.location.city}, ${ipInfo.location.country}`); console.log(`ISP: ${ipInfo.isp.org}`); console.log(`Risk Score: ${ipInfo.risk.risk_score}`); } next(); });
このミドルウェアは、クライアントの IP アドレスを取得し、IPQuery から詳細情報を取得し、場所、ISP、リスク スコアなどの関連詳細をログに記録します。
IPQuery の応答構造を理解する
IPQuery は、さまざまなデータ ポイントを含む包括的な JSON 応答を提供します。
{ "ip": "1.1.1.1", "isp": { "asn": "AS13335", "org": "Cloudflare, Inc.", "isp": "Cloudflare, Inc." }, "location": { "country": "Australia", "country_code": "AU", "city": "Sydney", "state": "New South Wales", "zipcode": "1001", "latitude": -33.854548400186665, "longitude": 151.20016200912815, "timezone": "Australia/Sydney", "localtime": "2024-09-03T22:22:52" }, "risk": { "is_mobile": false, "is_vpn": false, "is_tor": false, "is_proxy": false, "is_datacenter": true, "risk_score": 0 } }
主要なコンポーネントには次のものが含まれます:
詳細については、IPQuery のドキュメントを参照してください。
以上がリクエスト元の API の IPの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。