Node.js를 이용한 express 서버에 요청이 왔을 때, 요청한 사용자의 IP를 얻는 방법
requestIp 모듈을 받고, get요청이 들어올때 사용자 IP가 콘솔에 찍힐 수 있도록 작성했었는데, 밑의 코드로 작성해 로컬에서 get요청을 하면 ::1 이 콘솔에 출력되었다.
const express = require("express");
const app = express();
const requestIp = require("request-ip");
app.get("/", (req, res) => {
res.send("서버");
console.log("client IP: " + requestIp.getClientIp(req));
});
app.listen(90, () => console.log("로그 서버실행")); // client IP: ::1
검색해보니 ::1 은 IPv6에서 로컬 호스트를 의미해 express서버를 생성할 때 IPv4를 사용하도록 설정해야 된다는 블로그를 발견했다.
~~app.listen(90, () => console.log("로그 서버실행"));~~
// 서버에서 수신할 때 IPv4를 지정하는 방법
app.listen(90, "0.0.0.0"); // client IP: 127.0.0.1
위처럼 작성하면 IPv4로 IP가 콘솔에 찍히게 된다.
컴퓨터의 네트워크 인터페이스에 대한 정보를 얻기 위해 사용되는 모듈이다.
각 네트워크 인터페이스에 대한 정보가 포함된 개체를 반환한다.
const express = require("express");
const app = express();
const os = require("os");
const nets = os.networkInterfaces();
const results = Object.create(null);
for (const name of Object.keys(nets)) {
for (const net of nets[name]) {
if (net.family === "IPv4" && !net.internal) {
if (!results[name]) {
results["IP"] = net.address;
}
}
}
}
app.get("/", (req, res) => {
res.send("서버");
console.log(nets);
console.log(results);
});
// nets 콘솔
{
lo0: [
{
address: '127.0.0.1',
netmask: '255.0.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '127.0.0.1/8'
},
{
address: '::1',
netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
family: 'IPv6',
mac: '00:00:00:00:00:00',
internal: true,
cidr: '::1/128',
scopeid: 0
},
{
address: 'fe80::1',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '00:00:00:00:00:00',
internal: true,
cidr: 'fe80::1/64',
scopeid: 1
}
],
.
.
.
utun4: [
{
address: 'fe80::9903:f3a6:77eb:efe8',
netmask: 'ffff:ffff:ffff:ffff::',
family: 'IPv6',
mac: '00:00:00:00:00:00',
internal: false,
cidr: 'fe80::9903:f3a6:77eb:efe8/64',
scopeid: 19
}
]
}
const express = require("express");
const app = express();
const ip = require("ip");
app.get("/", (req, res) => {
res.send("서버");
console.log(ip.address());
});