Skip to content

Instantly share code, notes, and snippets.

@arafathusayn
Created August 2, 2024 18:54
Show Gist options
  • Save arafathusayn/884f6f23689400852ad3a111b672d104 to your computer and use it in GitHub Desktop.
Save arafathusayn/884f6f23689400852ad3a111b672d104 to your computer and use it in GitHub Desktop.
STUN/TURN ICE Server Test
<!DOCTYPE html>
<html>
<head>
<title>Test Stun/Turn Servers</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<h1>Test Ice Servers</h1>
<hr />
<pre id="ice" style="overflow: auto"></pre>
<hr />
<p id="ip"></p>
<p id="stun">🔴 The STUN server is NOT reachable!</p>
<p id="turn">🔴 The TURN server is NOT reachable!</p>
<p id="err"></p>
<hr />
<script>
const Ice = document.getElementById("ice");
const IP = document.getElementById("ip");
const Stun = document.getElementById("stun");
const Turn = document.getElementById("turn");
const Err = document.getElementById("err");
const iceServers = [
// {
// urls: "turn:0.0.0.0:3478",
// username: "",
// credential: "",
// },
];
// Print iceServers config
Ice.innerHTML = JSON.stringify(iceServers, null, 4);
// Test the connections
const pc = new RTCPeerConnection({
iceServers,
});
pc.onicecandidate = (e) => {
if (!e.candidate) return;
console.log(e.candidate.candidate);
// If a srflx candidate was found, notify that the STUN server works!
if (
e.candidate.type == "srflx" ||
e.candidate.candidate.includes("srflx")
) {
let ip = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/;
let address = e.candidate.address
? e.candidate.address
: e.candidate.candidate.match(ip);
IP.innerHTML = "🟢 Your Public IP Address is " + address;
Stun.innerHTML = "🟢 The STUN server is reachable!";
}
// If a relay candidate was found, notify that the TURN server works!
if (
e.candidate.type == "relay" ||
e.candidate.candidate.includes("relay")
) {
Turn.innerHTML = "🟢 The TURN server is reachable!";
}
};
// handle error
pc.onicecandidateerror = (e) => {
console.error(e);
Err.innerHTML = "🔴 Error: " + e.errorText;
};
pc.createDataChannel("test");
pc.createOffer().then((offer) => pc.setLocalDescription(offer));
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment