Show HN: How to test whether a STUN/TURN server is working properly (p2p.mirotalk.com)

17 points by mp85 ↗ HN
A few days ago, I created a simple service for my WebRTC Project: https://github.com/miroslavpejic85/mirotalk to test if the STUN/TURN servers are working properly.

After installing and configuring a STUN/TURN server, most of the developers that are new to this stuff will ask themselves, how do I know if it's working properly?

So I made a snippet :)

```

<!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 = [
            // Test some STUN server
            {
                urls: 'stun:stun.l.google.com:19302',
            },
            // Test some TURN server
            {
                urls: 'turn:turnUrl',
                username: 'turnUsername',
                credential: 'turnPassword',
            },
        ];

        // 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>

```

Alternative to https://webrtc.github.io/samples/src/content/peerconnection/...

Ref:

0 comments

[ 2.7 ms ] story [ 7.5 ms ] thread

No comments yet.