IT Tool

WebRTC Leak Test

Gather your browser's WebRTC ICE candidates and compare them against the IP address this site actually sees, so you can tell a real leak from an mDNS-protected connection.

Instant AI-Assisted No Login
PROCESSINGSERVER / AI
LIMITNONE
PRIVACYSEE NOTES

Candidate Exposure Check

Start the test to gather ICE candidates and compare them against the IP this site sees.

IP this site sees over HTTP

The reference address. Every public candidate below is measured against this one.

Public addresses WebRTC reported

More than one distinct public address, or one that differs from the left, is the finding worth acting on.

Candidates gathered: 0

No candidates yet.

A list of ICE candidates is not a leak test

The earlier version of this page gathered candidates, printed them, and left the judgement to you. That looks like a test and is not one. A leak is by definition a comparison: an address WebRTC hands out that differs from the address the site already has. Print one column and there is nothing to compare it against.

So the tool now fetches the address this site sees your HTTP request arriving from, and measures every public candidate against it. One public candidate matching that address is not a leak — it is WebRTC telling a site something it knew before you pressed the button. Two different public addresses is the finding, because it means one path is going around whatever the other is going through, and the usual culprit is a VPN that routes TCP but not UDP.

The reference address comes from this site’s own server rather than a third-party echo API, deliberately. A third party can sit on a different network path, and then a mismatch tells you about that path rather than about your browser.

The comparison is made within an address family, which matters more than it sounds. A dual-stack connection genuinely has one public IPv4 address and one public IPv6 address, and treating that pair as a contradiction would flag half the internet as leaking. So an IPv4 candidate is checked against an IPv4 reference, and a second family is reported separately as something to interpret rather than as a confirmed bypass — normal on plain dual-stack, and a real problem if you are on a VPN that only tunnels one of the two.

Silence is the wrong answer, and most tools give it

Candidate gathering needs a STUN server to answer. Ask it “what address did my packet come from?” and the reply becomes the server-reflexive candidate. If a firewall drops the outbound UDP, or an extension has switched WebRTC off, no reply arrives and no server-reflexive candidate exists.

At that point a tool that reports “no leak detected” is misleading you by omission. Nothing was observed, so nothing can be concluded, and the two states are not remotely the same: one means WebRTC disclosed nothing extra, the other means the measurement failed. The old version of this page printed “No candidates were exposed” in exactly that situation, which reads as reassurance.

This version calls it Test could not complete and says which part failed. On a corporate network that blocks outbound UDP you should expect to see it — and the honest conclusion is that you learned nothing about your browser, only about your firewall.

The four candidate types, and which one can hurt you

RFC 8445 (July 2018) defines them precisely, and the distinctions matter for reading the output:

  • host — “a candidate obtained by binding to a specific port from an IP address on the host.” Your own interface, VPN adapters included.
  • srflx — a binding a NAT allocated after you sent a packet to a STUN server. This is your public address, and the one worth checking.
  • prflx — the same idea but learned from the peer during connectivity checks rather than during gathering, so it does not appear in a test like this.
  • relay — “a candidate obtained from a relay server, such as a TURN server.”

A relay candidate needs a configured TURN server with credentials, and this test configures STUN only. Its absence is by design, not a blocked test — which is why the old feature list promising relay detection was removed rather than left standing.

Four documented modes for handling your address

RFC 8828, WebRTC IP Address Handling Requirements (Proposed Standard, January 2021), sets out what a browser may disclose:

  • Mode 1 — every interface is used. “MUST NOT be used unless user consent has been provided.”
  • Mode 2 — default route plus its private addresses as host candidates. Where consent has not been obtained, this “SHOULD be used.”
  • Mode 3 — default route only; “the associated private addresses MUST NOT be provided.”
  • Mode 4 — force proxy, so media follows the HTTP proxy.

The RFC is candid about why private addresses matter: they carry up to 24 bits of entropy with an indefinite lifetime, so “they can be a fairly significant fingerprinting surface,” and it notes that internal sites are easier to attack when their address range is known externally.

The .local hostname is the fix, not the problem

Run this in Chrome or Safari and your host candidate almost certainly reads something like af9324f2-a53e-4d01-b933-46f5cf0bfaeb.local rather than a 192.168 address. People report that as a leak. It is the opposite.

The mechanism comes from Using Multicast DNS to protect privacy when exposing ICE candidates, and one detail is worth knowing before you cite it: that document is an expired Internet-Draft (draft-ietf-mmusic-mdns-ice-candidates-03, last revised December 2021), not an RFC. It never completed standardisation, yet Chromium and Safari ship it — so the behaviour you see here is browser policy rather than a standards guarantee.

What it specifies is exact. The name “MUST consist of a version 4 UUID as defined in [RFC4122], followed by ‘.local’”, one distinct name per address, and it goes in the candidate’s connection-address field in place of the IP. The remote peer resolves it over multicast DNS on the local network and swaps the real address back in. The page never sees it. The draft also caps reuse — names “SHOULD be scoped by the web application origin” and last only the page’s lifetime, because a persistent name “would provide applications an even more reliable tracking mechanism than the private IP addresses” it exists to hide.

Two consequences follow. A raw private address in the output means your browser is not applying this protection, which is a real finding and why the tool flags it in red. And if resolution fails the candidate is simply dropped — the draft requires that failure stay invisible to the page, with statistics that “SHOULD NOT leak whether the mDNS resolution succeeds or fails,” so a call can quietly fall back to relaying with no error you can see.

If it does leak, what to actually change

A public-address mismatch is nearly always a routing problem rather than a browser one. WebRTC media travels over UDP; your page loads over TCP. A VPN client that captures TCP but leaks UDP produces exactly two different public addresses, and the fix belongs in the VPN rather than the browser — look for a kill switch, or an option covering all protocols.

Order of things to try, cheapest first: re-run in a private window with extensions off to establish whether an extension is involved; re-run on a different network to separate the VPN from the local firewall; check whether your VPN has an IPv6 setting, since an IPv6 candidate escaping an IPv4-only tunnel is a common cause. Disabling WebRTC outright is the last resort, and it breaks video calling in that browser.

Note that disabling WebRTC is itself detectable. RFC 8828 tells applications to infer a restrictive configuration by checking whether host candidates are absent, so a browser with WebRTC switched off is a smaller crowd to hide in, not a larger one. Whether that trade is worth making depends on what you are protecting against.

What this test does not tell you

It checks one disclosure path. DNS queries, IPv6 routing, ordinary HTTP requests and your operating system’s routing table are separate, and a VPN can be watertight on WebRTC while leaking on any of them. A clean result here is one signal, not a verdict on your setup.

It cannot see peer-reflexive candidates, because those are learned during connectivity checks against a real peer and this test has no peer. It cannot see relay candidates, because no TURN server is configured. Both absences are structural rather than a sign of protection.

Results depend on the exact conditions you test under. Same browser, same profile, same VPN state, same network — change any of them and you have measured something else. A test run in a private window with extensions disabled is not a test of your normal browsing.

The candidates never leave your browser. Gathering happens locally, the STUN servers see only what any WebRTC connection would show them, and nothing is stored between visits. The one request this page makes to our server asks for the address that request arrived from, which is the same address every HTTP request to any site already carries.

How to Use

1

Connect exactly as you normally browse — VPN on, extensions enabled, the same browser profile.

2

Press Start test and let candidate gathering finish.

3

Read the verdict: it compares every public WebRTC candidate against the address this site sees over HTTP.

4

If the result says the test could not complete, STUN was blocked — re-run before drawing any conclusion.

Features

Compares WebRTC candidates against the IP this site sees over HTTP
Separates a real leak from an mDNS hostname, which is a protection and not a finding
Reports blocked STUN as inconclusive instead of passing it off as clean
Labels every candidate by ICE type: host, srflx, prflx, relay
Runs in your browser; candidates are never uploaded or stored

Common Questions

Test whether WebRTC exposes an IP address your VPN is meant to hide. This tool gathers ICE candidates in your browser, classifies each as host, server reflexive or relay, and compares every public candidate against the address this site sees over HTTP, so a genuine leak is distinguished from an mDNS hostname or a blocked STUN server.

About WebRTC Leak Test

Gathers your browser WebRTC ICE candidates and measures every public one against the address this site sees your HTTP request arriving from, which is what turns a candidate list into an actual verdict. It tells an mDNS hostname (a protection) apart from a raw private address (a finding), compares within an address family so dual-stack connections are not falsely flagged, and reports blocked STUN as inconclusive rather than passing a failed measurement off as clean.

Also known as: webrtc leak, vpn leak test, ip leak check, is my vpn leaking my ip, why does webrtc show a .local address, webrtc showing different ip than my vpn, ice candidate checker, mdns ice candidate explained, srflx candidate meaning, does webrtc reveal my real ip, stun blocked no candidates, hide local ip webrtc.

Processing Note

WebRTC Leak Test may rely on server-side, model-based, or external processing for part of its workflow, so avoid entering secrets, credentials, or private personal data.

Tool Limits

IT tools provide quick diagnostics and transformations. They cannot see every private network, deployment setting, proxy, firewall, or production edge case.

Explore More