WebRTC 유출이 뭔가요?
통화를 연결하려고 WebRTC는 나에게 닿을 수 있는 주소를 모두 모아요. 네트워크 카드의 내부 주소와, STUN 서버가 본 공인 주소예요. 페이지는 스크립트 몇 줄로 권한 없이 이 주소들을 읽어요. VPN이나 프록시가 페이지의 웹 요청만 맡으면 STUN 요청은 원래 회선으로 나가고, 페이지는 VPN 뒤에 숨은 실제 IP를 알게 돼요.
브라우저 영상 통화는 WebRTC를 쓰고, 어느 페이지든 묻지 않고 WebRTC를 켤 수 있어요. WebRTC는 UDP로 STUN 서버에 '내가 어느 주소에서 왔는지' 물어보는데, UDP를 전달하지 않는 VPN과 프록시가 많아요. WebRTC가 드러내는 주소를 사이트가 보는 주소와 나란히 보여 드려요.
인앱 브라우저로 열었어요. 아래 결과는 이 인앱 브라우저의 것이에요. 평소 쓰는 브라우저를 확인하려면 링크를 복사해 Safari나 Chrome에서 여세요.앱 안의 브라우저로 열었어요. 아래 결과는 이 인앱 브라우저의 것이에요. 평소 쓰는 브라우저를 확인하려면 링크를 복사해 Safari나 Chrome에서 여세요.WeChat에서 열었어요. 아래 결과는 WeChat 내장 브라우저의 것이에요. 평소 쓰는 브라우저를 확인하려면 오른쪽 위 ···를 눌러 '브라우저에서 열기'를 고르세요.
口口口口口口口口口口口口, 지금은 口口口口口口口口口口口口口口口口口口口口口口에 있어요. 평소 쓰는 언어는 口口口口口口口, 컴퓨터 시간대는 口口口口口口, 시계는 口口口口口口 표시예요.
口口口口口口口口口口口口口口口口口口口口口口口口口口口口
지금 口口口口口口口口에서 口口口口口口口口口口口口 브라우저를 쓰고 있어요. 화면 口口口口口口口口口口口, 그래픽 카드 口口口口口口口口口口 조합으로 보면 口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口.
인터넷은 口口口口口口口口 회선으로 연결돼요. 口口口口口口口口口口口口口口口口口口口口. 口口口口口口口口口口口口口口口口口口口. 사이트 주소를 찾아 주는 DNS 서버는 口口口口口에 있어요. 口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口.
화면 테마는 口口口口口口, 口口口口口口口口. 口口口口口口口口口口口口口口口口口. 口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口. 설치된 글꼴이 주는 힌트: 口口口口口口口口口口. 나이는 口口口口口口口口口口口口口口口口口口口口口口.
사이트가 보기에 이건 口口口口口口口口口口口口口口口口口口口口口口口口口口. 口口口口口口口口口口口口口口口口口口口口口口口口口. 이 페이지는 口口口口口口口口口口口口에 열었고, 口口口口口口口口口口口, 브라우저 설정은 口口口口口口口口口口.
다른 사람들과 비교하면, 口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口.
비트가 많을수록 드물어요. 1비트마다 나와 같은 사람이 절반으로 줄어요. 항목끼리는 서로 독립적이지 않아서(4K 화면과 고성능 그래픽카드는 자주 함께 나와요) 전체 지문은 각 항목을 곱하지 않고 자체 실제 횟수로 셌어요.
나와 같은 사람이 얼마나 되는지 알려 주려고 익명 집계만 남겨요. IP, 원본 지문, 한 번 한 번의 방문 기록은 저장하지 않아요. ·
CF-Connecting-IPrequest.cf.cityrequest.cf.latituderequest.cf.asOrganizationedns.ip-api.comrequest.cf.timezoneDNS PTRrequest.cf.colorequest.cf.tlsVersion/cdn-cgi/trace · kex, sni/cdn-cgi/trace · warpTLS ClientHelloprobe.zs.al · TCP SYNprobe.zs.al · JA4probe.zs.al · HTTP/2 SETTINGSprobe.zs.al · HTTP/3 · QUIC JA4Date.now()RTCPeerConnection · STUNWebRTC host candidateIPv6 EUI-64 (ff:fe)1.1.1.1 · /cdn-cgi/tracechatgpt.com/cdn-cgi/traceclaude.ai/cdn-cgi/tracewww.cloudflare.com/cdn-cgi/traceCloudflare Radar · IPv4 / IPv6User-AgentAccept-LanguageSec-CH-UASec-CH-UA-PlatformAccept-EncodingDNT · Sec-GPCReferer · document.referrernavigator.languagesIntl.DateTimeFormatIntl …timeZoneIntl …hourCycleIntl.Locale weekInfoIntl.NumberFormatIntl.supportedValuesOfnavigator.keyboardspeechSynthesisError.messageJS feature probesFunction.prototype.toString · iframeCSS.supportscanvas text antialiasingcanvas.toDataURLWebGL getParameterOfflineAudioContextMath.* → SHA-256emoji measureTextfonts → SHA-256getClientRects · RangeSVG getBBox · getComputedTextLengthmeasureText actualBoundingBoxWebGL readPixelswindow · HTMLElement · CSS keysperformance.now() resolutionrecursion depthSHA-256screen · cores · GPU · fonts → SHA-256HTTP cache · ETag / If-None-Matchcanvas × 2navigator.brave · noise · liesuserAgentDatauserAgentData.brands…architecture · bitnessscreen · devicePixelRatiorequestAnimationFramescreen.isExtended · screenXinnerWidth · availHeightoffsetWidth − clientWidthWebGL RENDERERnavigator.gpu adapter.infoGPUAdapter limits · featuresWebGL2 · MAX_TEXTURE_SIZEhardwareConcurrencynavigator.deviceMemoryperformance.memorymaxTouchPoints · pointernavigator.getBatterygeolocation (on request)devicemotion (on request)navigator.connectionenumerateDevicesAudioContext.sampleRatePublicKeyCredentialbluetooth.getAvailabilityMediaSource.isTypeSupportedRTCRtpSender.getCapabilitiesMediaRecorder.isTypeSupportedmediaCapabilities.decodingInforequestMediaKeySystemAccessstorage.estimateprefers-color-schemeprefers-reduced-motioncolor-gamut · dynamic-rangeprefers-contrast · forced-colorsfont-size: medium · AccentColordisplay-modedoNotTrack · GPCnavigator.cookieEnabledpermissions.queryusb · serial · hid · IdleDetector …pdfViewerEnablednavigator.webdriverWorker · navigatorbait element7 tracker scripts (on request)window.ethereum · DOM markschrome-extension:// fileshistory.lengthlocalStorage · IndexedDB · Cache · window.namecanvas measureText통화를 연결하려고 WebRTC는 나에게 닿을 수 있는 주소를 모두 모아요. 네트워크 카드의 내부 주소와, STUN 서버가 본 공인 주소예요. 페이지는 스크립트 몇 줄로 권한 없이 이 주소들을 읽어요. VPN이나 프록시가 페이지의 웹 요청만 맡으면 STUN 요청은 원래 회선으로 나가고, 페이지는 VPN 뒤에 숨은 실제 IP를 알게 돼요.
페이지는 Cloudflare와 Google의 STUN 서버에 WebRTC 연결을 열고, 돌려받은 주소('server reflexive' 후보)를 이 사이트, 다른 출구, IPv6 테스트가 보는 주소와 비교해요. 어디에도 나오지 않는 주소가 있으면 유출이에요. 내부 주소는 'host' 후보에서 나와요. 아무것도 저장하거나 어디로 보내지 않아요.
프록시 클라이언트(Clash, V2Ray 등): TUN 모드를 켜서 UDP도 프록시로 보내세요. Chrome과 Edge: WebRTC Network Limiter 확장 프로그램을 쓰거나, uBlock Origin의 'WebRTC가 로컬 IP 주소를 유출하지 않도록 방지'를 켜세요. Brave: 설정 → 개인정보 보호 → WebRTC IP 처리 정책 → 프록시되지 않은 UDP 사용 중지. Firefox: about:config에서 media.peerconnection.ice.default_address_only를 true로 바꾸거나, WebRTC를 완전히 끄려면 media.peerconnection.enabled를 false로 바꾸세요. 그다음 이 테스트를 다시 해 보세요.
.local로 끝나는 이름은 브라우저가 내부 주소를 숨긴 것(mDNS)이라, 바람직한 상태예요. 192.168.1.5 같은 실제 내부 주소는 위치를 드러내지는 않지만 지문을 더 독특하게 만들어요. IPv4 출구와 다른 IPv6 주소는 그게 내 IPv6 출구가 아닐 때만 유출이에요. 테스트는 사이트가 보는 IPv6 주소와 맞춰 봐요.