Node.js Server Returns Same MAC and IP Addresses

I’m working on a Node.js server that retrieves MAC and IP addresses and sends them to the client. However, I noticed that the server always returns the same MAC and IP addresses, and I have no idea why. It used to work but it randomly stopped working, can anyone help me with this?

here is the code of the server.js file:
const express = require(“express”);
const os = require(“os”);
const fs = require(“fs”);
const moment = require(“moment-timezone”);

const app = express();
const port = process.env.PORT || 3000;

app.use(express.json());
app.use(express.static(“public”));

// Function to get MAC address
function getMACAddress() {
const interfaces = os.networkInterfaces();
console.log(“Network Interfaces:”, interfaces); // Log all network interfaces
for (let interfaceName in interfaces) {
for (let iface of interfaces[interfaceName]) {
if (iface.family === “IPv4” && !iface.internal) {
return iface.mac;
}
}
}
return “00:00:00:00:00:00”;
}

// Function to get local IP address
function getLocalIP() {
const interfaces = os.networkInterfaces();
console.log(“Network Interfaces:”, interfaces); // Log all network interfaces
for (let interfaceName in interfaces) {
for (let iface of interfaces[interfaceName]) {
if (iface.family === “IPv4” && !iface.internal) {
return iface.address;
}
}
}
return “127.0.0.1”;
}

// Convert time to 12-hour format
function convertTo12HourFormat(time) {
return moment(time, “HH:mm:ss”).format(“hh:mm:ss A”);
}

// API routes
app.get(“/api/ip”, (req, res) => {
const mac = getMACAddress();
console.log(“Server fetched MAC Address:”, mac);
res.json({ mac });
});

app.get(“/api/ip2”, (req, res) => {
const ip = getLocalIP();
console.log(“Server fetched IP Address:”, ip);
res.json({ ip });
});

app.get(“/api/mess”, (req, res) => {
const mac = getMACAddress();
let mess;
if (
mac == “” ||
mac == “” ||
mac == “”
) {
mess = “YOU ARE IN SCHOOL!”;
} else if (mac == “”) {
mess = “I am on my computer!”;
} else if (mac == “”) {
mess = “Hi!”;
} else {
mess = “no idea whose computer this is.”;
}
res.json({ mess });
});

app.post(“/api/save-ip”, (req, res) => {
const { mac, ip } = req.body;
console.log(“Received MAC Address:”, mac);
console.log(“Received IP Address:”, ip);

const timestamp = moment()
.tz(“America/New_York”)
.format(“YYYY-MM-DD HH:mm:ss”);
const rt = convertTo12HourFormat(timestamp.split(" ")[1]);

const data = \ntime and date: ${ timestamp.split(" ")[0] } ${rt}\n mac address: ${mac} ip: ${ip}\n;

fs.appendFile(“public/ip-addresses.txt”, data, (err) => {
if (err) {
console.error("Error writing MAC address to file: ", err);
return res.status(500).send(“Internal Server Error”);
}
res.send(“MAC address and timestamp saved successfully”);
});
});

// Start the server
app.listen(port, () => {
console.log(Server running at http://localhost:${port});
});

and the index.html page:

body { font-family: Arial, sans-serif; background-color: #f2f2f2; } #bla { background-color: #333; color: #fff; padding: 10px; text-align: center; position: fixed; top: 0; left: 0; width: 100%; z-index: 999; } #top { margin-top: 200px; } #p { margin-left: 50.1%; margin-bottom: 0; margin-top: 0; width: 295px; transform: translateX(-50%); font-size: 20px; color: #333; } #b { margin-top: 0; margin-left: 50%; transform: translateX(-50%); padding: 10px 20px; font-size: 18px; cursor: pointer; background-color: #333; color: #fff; border: none; border-radius: 5px; } mumbojum2's game page
Click this button to get onto the main page

click this button to go to the page

hi (hi)

  1. List item

the server that a glitch project runs on is a container that only has a virtual network adapter, so it might be using some fixed MAC address

I think it should be possible to check some environment variables such as PROJECT_DOMAIN or similar to determine if the program is running on glitch

That’s how it works: the server that you’re running on Glitch is running on our infrastructure and has its own IP and MAC address. You can access it over HTTP(s) from anywhere, and the server can trivially get client IP addresses, which will be different depending on where you’re connecting from, but the server itself won’t suddenly run “at home” or “in school”.