| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/apache/htdocs/app/node_modules/internal-ip/ |
Upload File : |
/* eslint-env browser */
'use strict';
import pEvent from 'p-event';
import isIp from 'is-ip';
const getIp = async ({isSecondTry = false} = {}) => {
try {
const peerConnection = new RTCPeerConnection({iceServers: []});
peerConnection.createDataChannel('');
peerConnection.createOffer(peerConnection.setLocalDescription.bind(peerConnection), () => {});
const {candidate} = await pEvent(peerConnection, 'icecandidate', {
timeout: 10000
});
peerConnection.close();
if (candidate && candidate.candidate) {
const result = candidate.candidate.split(' ')[4];
if (result.endsWith('.local')) {
if (isSecondTry) {
return;
}
const inputDevices = await navigator.mediaDevices.enumerateDevices();
const inputDeviceTypes = new Set(inputDevices.map(({kind}) => kind));
const constraints = {};
if (inputDeviceTypes.has('audioinput')) {
constraints.audio = true;
} else if (inputDeviceTypes.has('videoinput')) {
constraints.video = true;
} else {
return;
}
const mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
for (const track of mediaStream.getTracks()) {
track.stop();
}
return await getIp({isSecondTry: true});
}
return result;
}
} catch {}
};
export const v4 = async () => {
const result = await getIp();
if (isIp.v4(result)) {
return result;
}
};
v4.sync = () => undefined;
export const v6 = async () => {
const result = await getIp();
if (isIp.v6(result)) {
return result;
}
};
v6.sync = () => undefined;