get-client-ip
v3.0.4
Published
π A Lightweight Utility for Extracting the Real Client IP Address from Incoming HTTP Requests
Readme
Why get-client-ip? π€
- π Header-Aware Detection β Parses standard and cloud-specific proxy headers.
- π§ Smart Parsing β Handles multiple IPs, comma-separated values, and arrays.
- π§© Middleware-Compatible β Use as drop-in Express/NestJS middleware.
- πͺπ½ Works in Standalone Mode β Can be used as a simple function.
Installation π₯
npm install get-client-ip@latest
# or
yarn add get-client-ip@latest
# or
pnpm install get-client-ip@latest
# or
bun add get-client-ip@latestUsage πͺ
Express π«
import http from "node:http";
import express from "express";
import { getClientIp } from "get-client-ip";
import { env } from "./env";
function bootstrap() {
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Standalone usage:
app.get("/standalone-ip", (req, res) => {
const ip = getClientIp(req);
res.status(200).json({ ip });
});
// Middleware usage:
app.get("/middleware-ip", getClientIp, (req, res) => {
res.status(200).json({ ip: req.clientIp, ips: req.clientIps });
});
http.createServer(app).listen(env.PORT || 3000, () => {
console.log(`π Express server running on: http://localhost:${env.PORT || 3000}`);
});
}
bootstrap();NestJS πͺΊ
import { Controller, Get, Req } from "@nestjs/common";
import type { Request } from "express";
import { getClientIp } from "get-client-ip";
@Controller("")
export class PublicController {
@Get("ip")
getIp(@Req() req: Request) {
const ip = getClientIp(req);
return { ip };
}
}Headers βοΈ
The following headers are checked in order of precedence:
x-client-ip
x-forwarded-for
forwarded-for
x-forwarded
forwarded
x-real-ip
cf-connecting-ip
true-client-ip
x-cluster-client-ip
fastly-client-ip
x-appengine-user-ip
cf-pseudo-ipv4It also falls back to:
req.ip;
req.socket.remoteAddress;
req.connection.remoteAddress;Credit πͺπ½
Huge credit to Petar Bojinov for the inspiration.
Contributions π€
Want to contribute or suggest a feature or improvement?
- Open an issue or feature request
- Submit a PR to improve the packages or add new ones
- Star β the repo if you like what you see
