Skip to content
IPOK

WebRTC Leak Test

WebRTC can expose your real IP directly through the browser even when using a proxy/VPN โ€” one of the most overlooked privacy leaks.

This tool gathers WebRTC (ICE) candidates inside your browser and compares them with your detected exit IP. A mismatched real public IP is flagged as a leak.

Your public IP
8 sources cross-verifiedOpen methodologyFree ยท no loginNever reads your IP

What a WebRTC Leak Is โ€” and Why Your Real IP Escapes Even Behind a Proxy

WebRTC is a real-time communication stack built into every modern browser. It powers in-page voice and video calls, screen sharing, and peer-to-peer file transfer โ€” it's running whether or not you've installed anything. The trouble is how it negotiates a direct connection between two devices: to find the shortest path, the browser uses the ICE (Interactive Connectivity Establishment) framework to gather a list of candidate addresses. That list includes your LAN-private IP and, critically, your real public IP as reflected back by a STUN server (most commonly Google's stun.l.google.com:19302).

Here's the dangerous part: those candidate probes travel over UDP, while many proxies and VPNs only capture the browser's TCP/HTTP traffic. So a site sees your HTTP requests arriving from the proxy IP, but a few lines of JavaScript on that same page can pull your real public IP โ€” the one that went out directly, bypassing the tunnel. This isn't an exploit; it's WebRTC's default behavior. Any web page can instantiate an RTCPeerConnection and read both addresses without you ever noticing.

For developers, cross-border e-commerce sellers running multiple accounts, and VPN/proxy users, the implication is blunt: you think swapping your IP made you anonymous, but an anti-fraud system already has your true public IP at the front end. Line it up against the proxy IP and the mismatch gives you away. The detector at the top of this page runs that exact ICE-gathering flow inside your own browser, compares the candidates against your current exit IP, and tells you whether you're actually leaking.

The Three ICE Candidate Types: host / srflx / relay โ€” Which One Sells You Out

To read a leak result you first need to tell the candidate types apart. A host candidate is an address on the machine's own network interface โ€” usually a private LAN IP like 192.168.x.x or 10.x.x.x. Modern browsers (Chrome, Firefox, Safari) replace it by default with a random .local hostname via mDNS (e.g. a1b2c3d4.local), so a string of .local addresses is not cause for panic โ€” that's the browser shielding your internal topology. But note: mDNS only masks the private IP. It does nothing for your public IP.

The candidate that actually betrays you is srflx (server-reflexive) โ€” that is precisely your public IP as seen from the outside by the STUN server. If this address differs from your proxy exit IP, that is a genuine real-IP leak, and an anti-fraud system can use it to pin your true location. The third type, relay, comes from a TURN relay server, is uncommon in ordinary browsing, and doesn't directly expose your real IP.

So the verdict logic is clean: only .local (mDNS) means no leak; an srflx that equals your proxy exit means safe; an srflx showing a public address different from your exit means leak. There's also a sneaky case: you route only an IPv4 proxy, but WebRTC offers your real IPv6 address as a candidate too. Many people get caught in this dual-stack blind spot. The detector lists the IPv4 and IPv6 families separately precisely to catch that extra exposure.

SOCKS5, VPN, Anti-Detect Browsers: Why Some Stop the Leak and Some Don't

Different proxying methods vary enormously in how well they contain a WebRTC leak โ€” and this is where most people are mistaken. SOCKS5 proxies and WebRTC mix poorly almost by design: Chrome long ago removed support for routing WebRTC traffic over SOCKS5, and WebRTC's media probing leans heavily on UDP, which browsers usually treat as TCP-only for SOCKS5 โ€” so the UDP probes go straight out, bypassing the proxy. Setting a bare SOCKS5 proxy in your browser will, in practice, still leak your real IP via WebRTC unless you separately disable it.

A full-tunnel VPN that captures the entire interface (including UDP) can, in theory, carry the srflx candidate inside the tunnel โ€” but only if there's no leak window. Many VPNs leak UDP through the physical interface during a reconnect, or whenever the 'block non-VPN traffic' kill switch isn't enabled. The reliable move is to turn on that kill switch so every scrap of out-of-tunnel UDP is dropped.

Anti-detect / anti-association browsers common in cross-border e-commerce and multi-account work (AdsPower, Octo, and the like) take a different path: they rewrite WebRTC behavior at the engine level so pages see the proxy IP rather than nothing โ€” effectively forging an srflx consistent with the proxy, wired together with matching timezone, language, and IP geolocation into a self-consistent fingerprint. This is the relatively most robust option for multi-account scenarios, but only if you verify it actually works โ€” a misconfiguration leaks all the same, so test every new profile.

How to Fully Block It: a Per-Browser Checklist, Then Re-Test with IPOK

The strongest defense isn't a single layer โ€” it's layered hardening. (1) Chrome/Edge: the engine has no about:config, so the reliable route is a reputable WebRTC-control extension (setting WebRtcIPHandling to disable_non_proxied_udp, i.e. WebRTC only over the proxy tunnel), or the equivalent browser policy in a managed environment. (2) Firefox: go to about:config; setting media.peerconnection.enabled to false fully disables WebRTC; if you want to keep calls but stop leaks, set media.peerconnection.ice.proxy_only to true to force ICE through the proxy and kill bare UDP. (3) Safari (macOS) ships mDNS for partial LAN protection, and Brave blocks WebRTC leaks by default, so both are lower-maintenance.

Mind one trade-off: fully disabling WebRTC breaks anything that depends on it โ€” Google Meet, web-based Tencent Meeting, Discord voice, and similar. If you live in web meetings, prefer 'proxy-only' (proxy_only / disable_non_proxied_udp) over a blanket kill: you keep the feature and still plug the hole.

After any change, re-test โ€” don't go by feel. The WebRTC detector at the top of this page runs RTCPeerConnection entirely in your local browser, gathers ICE candidates, and compares them against your current exit IP. Unlike tools such as ping0, IPOK does not POST the captured candidates back to a server, keeps no IPv4โ†”IPv6 cross-referencing logs, and tests only when you click. We also don't log the IP you query. Change a setting, re-test, and repeat until the result shows only .local or an srflx that exactly matches your proxy exit โ€” that's when you're genuinely covered.

FAQ

What if a leak is found?

Disable WebRTC in your browser (or use an extension), or use a proxy/VPN client that prevents WebRTC leaks.

Why do I only see .local addresses?

Modern browsers obfuscate local addresses via mDNS into .local โ€” that's normal leak protection, not a leak.

I see a bunch of xxxx.local addresses โ€” is that a leak?

No. .local is the anonymized substitute modern browsers apply to your private LAN IP via mDNS, by design to keep your internal topology private. As long as no public IP that differs from your proxy exit appears among the candidates (especially of the srflx type), .local alone counts as 'no leak.' What to watch for is a real public address showing up alongside the .local entries.

I'm on a VPN/proxy โ€” why can WebRTC still get my real IP?

Because WebRTC's STUN probing runs over UDP, while many proxies (especially a SOCKS5 set inside the browser) only handle TCP โ€” so the UDP goes out directly, bypassing the tunnel. Chrome also removed WebRTC-over-SOCKS5 support. Fixes: enable your full-tunnel VPN's kill switch (block non-VPN traffic), or at the browser level force WebRTC through the proxy / disable WebRTC outright.

What breaks if I disable WebRTC?

Anything that relies on it for real-time communication: Google Meet, web-based meeting apps, Discord voice, some browser-based live streaming and P2P transfer tools will stop working. If you need those, use 'force proxy-only' (Firefox's ice.proxy_only=true or Chrome's disable_non_proxied_udp) instead of a full disable.

Does IPOK's WebRTC test upload or log my real IP?

No. The whole test runs locally in your browser โ€” it connects to a public STUN server via RTCPeerConnection, gathers ICE candidates, and compares them against your current exit IP on-device; the captured candidates are not sent to our servers. We also keep no log of any IP you query. This is a clear contrast with tools that POST candidate IPs back to a server and keep IPv4/IPv6 correlation logs.

Related checks