diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index b45a749b..728b8f15 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -249,9 +249,9 @@ class UptimeKumaServer { return (typeof forwardedFor === "string" ? forwardedFor.split(",")[0].trim() : null) || socket.client.conn.request.headers["x-real-ip"] - || clientIP.replace(/^.*:/, ""); + || clientIP.replace(/^::ffff:/, ""); } else { - return clientIP.replace(/^.*:/, ""); + return clientIP.replace(/^::ffff:/, ""); } } diff --git a/test/backend.spec.js b/test/backend.spec.js index 644a0fd0..0132fb77 100644 --- a/test/backend.spec.js +++ b/test/backend.spec.js @@ -306,6 +306,16 @@ describe("Test uptimeKumaServer.getClientIP()", () => { ip = await server.getClientIP(fakeSocket); expect(ip).toBe("203.0.113.195"); + fakeSocket.client.conn.remoteAddress = "2001:db8::1"; + fakeSocket.client.conn.request.headers = {}; + ip = await server.getClientIP(fakeSocket); + expect(ip).toBe("2001:db8::1"); + + fakeSocket.client.conn.remoteAddress = "::ffff:127.0.0.1"; + fakeSocket.client.conn.request.headers = {}; + ip = await server.getClientIP(fakeSocket); + expect(ip).toBe("127.0.0.1"); + await Database.close(); }, 120000); });