16 lines
408 B
TypeScript
16 lines
408 B
TypeScript
export function getClientIp(req: any): string {
|
|
let ip =
|
|
req.ip ||
|
|
(Array.isArray(req.headers['x-forwarded-for'])
|
|
? req.headers['x-forwarded-for'][0]
|
|
: req.headers['x-forwarded-for']) ||
|
|
req.socket.remoteAddress;
|
|
|
|
// 如果是 IPv4-mapped IPv6 地址,转换为 IPv4
|
|
if (typeof ip === 'string' && ip.startsWith('::ffff:')) {
|
|
ip = ip.substring(7);
|
|
}
|
|
|
|
return ip || '';
|
|
}
|