Detectar si WebRTC está siendo bloqueado
¿Cómo puedo detectar en javascript si las conexiones WebRTC están siendo bloqueadas? En ejemplo por una extensión como WebRTC Leak Prevent.
Traté de usar DetectRTC.isWebRTCSupported
de la DetectarRTC biblioteca, pero no devuelve falso si la extensión es activa y bloquea las conexiones, ya que sólo indica si WebRTC es generalmente compatible, y no si también está siendo bloqueada, supongo.
¿Alguna idea?
Pregunta hecha hace 3 años, 4 meses, 27 días - Por byteninja8245
4 Respuestas:
-
Usted puede crear una conexión webrtc dummy entre 2 conexiones pares y ver si puede establecer una conexión y pasar un mensaje tonto a través del canal de datos.
Un buen ejemplo es en: https://test.webrtc.org/
Puedes comprobarlo.
RunConnectivityTest
función allí enmain.js
. Es casi mucho la creación de una conexión entre pares de muestra con diferentes parámetros ( Host , conexión de relé ..etc) .establishConnection
esSería agradable probar cuando las extensiones están en si https://test.webrtc.org muestra la conexión, el canal de datos, el puerto o algo más bloqueado
Respondida el Dec 18, 2020 a las 11:17 - por devdynamo
Votos positivos: 0 | Votos negativos: 0 -
He encontrado una solución, aunque no está muy limpia, y agradecería que alguien con conocimiento de WebRTC pudiera confirmarla. De todos modos, así es como puedo comprobar en este momento si la extensión WebRTC Leak Prevent me impedirá hacer llamadas WebRTC.
Esto la respuesta me ayudó.
function iceCandidateError(e) { if(e.errorText == 'STUN host lookup received error.') console.error('WebRTC is being blocked'); } function gotDescription(desc) { rtc.setLocalDescription(desc); } function noDescription(error) { console.error('WebRTC check failed: no description'); } config = { iceCandidatePoolSize: "0", iceServers: [ { urls: ["stun:stun.l.google.com:19302"] } ], iceTransportPolicy: "all" } const offerOptions = {offerToReceiveAudio: 1}; rtc = new RTCPeerConnection(config); rtc.onicecandidateerror = iceCandidateError; rtc.createOffer( offerOptions ).then( gotDescription, noDescription );
Respondida el Dec 18, 2020 a las 11:23 - por nasean
Votos positivos: 0 | Votos negativos: 0 -
Para detectar si las conexiones WebRTC están siendo bloqueadas por una extensión como WebRTC Leak Prevent, puedes intentar realizar una conexión WebRTC e identificar si hubo problemas en el proceso. Aquí te dejo un ejemplo de cómo podrías implementarlo:
javascript // Función para probar la conexión WebRTC function probarConexionWebRTC() { let pc = new RTCPeerConnection(); pc.createDataChannel(''); // Creamos un canal de datos pc.createOffer() .then(offer => pc.setLocalDescription(offer)) .catch(err => { // Si hay un error al establecer la descripción, podría indicar que WebRTC está bloqueado console.error('WebRTC puede estar bloqueado por una extensión'); }); // Escuchamos cambios de estado en la conexión pc.oniceconnectionstatechange = function() { if (pc.iceConnectionState === 'failed' || pc.iceConnectionState === 'disconnected') { console.error('La conexión WebRTC falló o fue desconectada, posible bloqueo por una extensión'); } }; } // Llamamos a la función para probar la conexión cuando la página cargue document.addEventListener('DOMContentLoaded', probarConexionWebRTC);
En este código, al crear un
RTCPeerConnection
e intentar establecer una oferta, monitoreamos si hay errores al ser rechazada la conexión. También escuchamos cambios en el estado de la conexión para identificar si falla de alguna manera.Recuerda que el bloqueo de WebRTC puede depender del escenario específico y de cómo esté configurada la extensión, por lo que esta no es una solución definitiva, pero puede ayudarte a determinar posibles bloqueos.
Respondida el Dec 19, 2020 a las 11:16 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Utilizar el método RTCPeerConnection
El método
RTCPeerConnection
se puede utilizar para detectar si WebRTC está bloqueado por una extensión como WebRTC Leak Prevent. Aquí tienes un ejemplo:javascript async function isWebRTCBlocked() { try { // Crea una nueva conexión RTCPeerConnection const pc = new RTCPeerConnection(); // Crea un canal de datos const dc = pc.createDataChannel('test'); // Establece un controlador de eventos para el evento "open" del canal de datos dc.addEventListener('open', () => { // Si el canal de datos se abre, WebRTC no está bloqueado console.log('WebRTC no está bloqueado'); pc.close(); }); // Establece un temporizador para cerrar la conexión después de 5 segundos setTimeout(() => { // Si el canal de datos no se abre después de 5 segundos, WebRTC está bloqueado console.log('WebRTC está bloqueado'); pc.close(); }, 5000); } catch (error) { // Si hay un error al crear la conexión RTCPeerConnection, WebRTC probablemente esté bloqueado console.log('WebRTC está bloqueado'); } }
Utilizar el método navigator.mediaDevices.getUserMedia
El método
navigator.mediaDevices.getUserMedia
también se puede utilizar para detectar si WebRTC está bloqueado. Aquí tienes un ejemplo:javascript async function isWebRTCBlocked() { try { // Intenta obtener acceso a la cámara y al micrófono const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true }); // Si se obtiene acceso a los dispositivos, WebRTC no está bloqueado console.log('WebRTC no está bloqueado'); stream.getTracks().forEach(track => track.stop()); } catch (error) { // Si hay un error al obtener acceso a los dispositivos, WebRTC probablemente esté bloqueado console.log('WebRTC está bloqueado'); } }
Comprobar las extensiones instaladas
También puedes comprobar si la extensión WebRTC Leak Prevent está instalada y activa:
javascript function isWebRTCLeakPreventInstalled() { const installedExtensions = chrome.management.getAll(); for (let i = 0; i < installedExtensions.length; i++) { if (installedExtensions[i].id === 'eiadekoaikejlgdbkbdfeijglgfdalml') { return true; } } return false; }
Combinar métodos
Para mayor precisión, puedes combinar estos métodos para detectar si WebRTC está bloqueado:
javascript async function isWebRTCBlocked() { // Comprueba si la extensión está instalada y activa const isExtensionInstalled = isWebRTCLeakPreventInstalled(); if (isExtensionInstalled) { // Intenta crear una conexión RTCPeerConnection try { // ... } catch (error) { // ... } // Intenta obtener acceso a la cámara y al micrófono try { // ... } catch (error) { // ... } } }
Nota:
Estos métodos pueden no ser 100% precisos, ya que las extensiones pueden encontrar formas de eludir la detección. Es importante probar tu código en diferentes navegadores y plataformas para garantizar su compatibilidad.
Respondida el Dec 19, 2020 a las 11:22 - por Gemini
Votos positivos: 0 | Votos negativos: 0