mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 17:46:00 +00:00
91 lines
2.3 KiB
JavaScript
91 lines
2.3 KiB
JavaScript
const axios = require('axios');
|
|
const os = require('os');
|
|
const crypto = require('crypto');
|
|
const platformInfo = require('./platformInfo');
|
|
|
|
async function getPublicIpInfo() {
|
|
try {
|
|
const resp = await axios.default.get('https://ipinfo.io/json');
|
|
if (!resp.data?.ip) {
|
|
return { ip: 'unknown-ip' };
|
|
}
|
|
return resp.data;
|
|
} catch (err) {
|
|
return { ip: 'unknown-ip' };
|
|
}
|
|
}
|
|
|
|
function getMacAddress() {
|
|
try {
|
|
const interfaces = os.networkInterfaces();
|
|
for (let iface of Object.values(interfaces)) {
|
|
for (let config of iface) {
|
|
if (config.mac && config.mac !== '00:00:00:00:00:00') {
|
|
return config.mac;
|
|
}
|
|
}
|
|
}
|
|
return '00:00:00:00:00:00';
|
|
} catch (err) {
|
|
return '00:00:00:00:00:00';
|
|
}
|
|
}
|
|
|
|
async function getHardwareFingerprint() {
|
|
const publicIpInfo = await getPublicIpInfo();
|
|
const macAddress = getMacAddress();
|
|
const platform = os.platform();
|
|
const release = os.release();
|
|
const hostname = os.hostname();
|
|
const totalMemory = os.totalmem();
|
|
|
|
return {
|
|
publicIp: publicIpInfo.ip,
|
|
country: publicIpInfo.country,
|
|
region: publicIpInfo.region,
|
|
city: publicIpInfo.city,
|
|
macAddress,
|
|
platform,
|
|
release,
|
|
hostname,
|
|
totalMemory,
|
|
};
|
|
}
|
|
|
|
async function getHardwareFingerprintHash(data = undefined) {
|
|
if (!data) {
|
|
data = await getHardwareFingerprint();
|
|
}
|
|
const fingerprintData = JSON.stringify(data);
|
|
const hash = crypto.createHash('sha256').update(fingerprintData).digest('hex');
|
|
return hash;
|
|
}
|
|
|
|
async function getPublicHardwareFingerprint() {
|
|
const fingerprint = await getHardwareFingerprint();
|
|
const hash = await getHardwareFingerprintHash(fingerprint);
|
|
return {
|
|
hash,
|
|
payload: {
|
|
platform: fingerprint.platform,
|
|
city: fingerprint.city,
|
|
country: fingerprint.country,
|
|
region: fingerprint.region,
|
|
isDocker: platformInfo.isDocker,
|
|
isAwsUbuntuLayout: platformInfo.isAwsUbuntuLayout,
|
|
isAzureUbuntuLayout: platformInfo.isAzureUbuntuLayout,
|
|
isElectron: platformInfo.isElectron,
|
|
},
|
|
};
|
|
}
|
|
|
|
// getHardwareFingerprint().then(console.log);
|
|
// getHardwareFingerprintHash().then(console.log);
|
|
// getPublicHardwareFingerprint().then(console.log);
|
|
|
|
module.exports = {
|
|
getHardwareFingerprint,
|
|
getHardwareFingerprintHash,
|
|
getPublicHardwareFingerprint,
|
|
};
|