- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图欺骗从 WebRTC 泄漏的 IP 地址,所以我想重写“onicecandidate”回调函数,但下面的代码不起作用,我不明白为什么。
Object.defineProperty(RTCPeerConnection.prototype, 'onicecandidate', {
set: function (eventHandler) {
console.log('hook set');
this._onicecandidateEventHandler = eventHandler;
this._onicecandidate = function (event) {
console.log('hook');
this._onicecandidateEventHandler.apply(this, arguments);
};
},
get: function () {
return this._onicecandidate;
}
})
上面的代码应该 Hook “指纹脚本”分配的接收器函数。
指纹识别脚本的示例如下:
function findIP() {
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new myPeerConnection({iceServers: [{urls: "stun:stun.l.google.com:19302"}]}),
noop = function() {},
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function ipIterate(ip) {
if (!localIPs[ip]) {console.log('got ip: ', ip);}
localIPs[ip] = true;
}
pc.createDataChannel("");
pc.createOffer(function(sdp) {
sdp.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop);
pc.onicecandidate = function(ice) {
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
};
}
如您所见:从 webRTC 获取真实 IP 的方法是尝试建立连接,然后在“onicecandidate”事件上设置回调,事件信息包含真实的 Ip 信息。
我想要做的是覆盖“onicecandidate”分配的“set”函数,以便它将被我自己的钩子(Hook)函数替换,并且在“更改”IP地址之后,钩子(Hook)将调用由指纹脚本。
在我的测试中:我可以观察到,从控制台执行代码后, RTCPeerConnection.prototype 已被覆盖,如果我为 RTCPeerConnection.onicecandidate 分配了一个函数,控制台将打印“hook set”,因此看起来覆盖是成功,如果我调用 RTCPeerConnection.onicecandidate(xxx) mannullay,我的钩子(Hook)函数和原始函数都会被执行,它会按预期工作。然而,当我在真实的指纹脚本中使用时,就像我粘贴上面的代码一样,这段代码不起作用。应用覆盖后,onicecandidate 事件永远不会被触发。
我是javascript的初学者,希望有人能解释我的困惑。
提前谢谢您。
最佳答案
如果不评论为什么这不起作用,仅此一点无法帮助您对抗使用 addEventListener('icecandidate') 的脚本。
adapter.js包含一个处理这两种变体的“wrapPeerConnectionEvent”辅助函数。有了这个助手,任务就变得非常简单:
wrapPeerConnectionEvent(window, 'icecandidate', (e) => {
if (e.candidate) {
const parts = e.candidate.candidate.split(' ');
parts[4] = '127.0.0.1'; // replace the real ip with 127.0.0.1
e.candidate.candidate = parts.join(' ');
}
return e;
});
参见https://jsfiddle.net/krgz5qu1/一个完整的例子。请注意,您可能还需要处理服务器自反和中继候选的 relAddr 字段中的 IP。
关于javascript - 覆盖 RTCPeerConnection 回调 'onicecandidate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55103321/
我最近一直在研究 webRTC,并且正在创建一个抽象层,以便通过网状网络架构轻松获得多个客户端通信。 我的问题是关于创建数据通道。目前我执行以下操作: var pc = new RTCPeerConn
我知道网络浏览器对同时 http 请求的数量等有限制。但是对于打开的 RTCPeerConnection 的网页可以拥有的数量也有限制吗? 并且有些相关:RTCPeerConnection 允许通过
我正在尝试检测 RTCPeerConnection 的另一端何时断开连接。目前我正在对我的 RTCPeerConnection 对象执行以下操作: rtcPeerConnection.onicecon
有谁知道有什么好的RTCPeerConnection教程? 我想在浏览器之间直播网络摄像头。我有 websocket从我的服务器到所有客户端的连接,所以它应该相当容易 - 但到目前为止我在该主题上发现
我正在尝试检测 RTCPeerConnection 的另一端何时断开连接。目前我正在对我的 RTCPeerConnection 对象执行以下操作: rtcPeerConnection.onicecon
我可以使用以下代码创建一个新的对等连接对象: var peer = new RTCPeerConnection(); 发生这种情况时,chrome 在 chrome://webrtc-internal
建立首次成功的 RTC 连接的最佳方法是什么? 下面的代码有时有效,有时无效。我认为这是在 createAnswer 之前或之后调用 addIceCandidate 的问题,而且我不知道哪个更好,或者
我开始用 rtcPeerConnection 做一些测试,我是这个技术的初学者,我想知道它是否正常:在控制台中,当调用方法 onicecandidate 时,我打印了 ice candidate,但我
我正在我的 chrome 浏览器中运行 WebRTC 演示,我已经可以设置视频 session 了。但是,如果其中一个对等点断开连接(例如刷新浏览器),我不知道如何在另一端检测到它(并且可能会警告“对
如何更改代码,使计算机1的代码连接到计算机2的代码(计算机1和计算机2不是同一台计算机,但在同一网络上)。 它在本地工作,但在两台不同的计算机上不工作 用于连接的计算机 1 和计算机 2 代码定义如下
这是著名的 Chromium bug:https://bugs.chromium.org/p/chromium/issues/detail?id=825576 错误是:无法构造“RTCPeerConn
我正在 Javascript 中运行一些 RTC(在 Chrome 上),我希望能够看到所有打开的 RTCPeerCONnections(或任何处于任何事件状态的)。显然我可以将它们列为已创建的,但我
下面我摘录了this link关于 RTCPeerConnection.onicecandidate 并希望根据我的理解提出两个问题,如果我的概念正确与否,则需要帮助。对我来说有点复杂 The RTC
我正在创建一个应用程序,它将使用 WebRTC 将相机视频共享到多个对等连接。服务器只是为用户提供了一个房间,房间里的所有用户都会看到摄像头视频。唯一不起作用的是 onicecandidate 没有触
这个问题已经有答案了: RTCPeerConnection.createAnswer callback returns undefined object in mozilla for WebRTC c
我有一个非常简单的 RTCPeerConnection 应用在运行。使用 Firebase 发送信号。 RTCPeerConnections 建立,然后我获取流,并对其执行以下操作: let stre
有没有人看到过这个错误,字面意思是: “Uncaught DOMException: Failed to construct 'RTCPeerConnection': Cannot create so
我得到了一个RTCPeerConnection,建立连接后我想断开与网络服务器的连接。 如何检查已建立的连接? readyState 始终是 undefined 并且 onopen 从未触发。 最佳答
我接触 WebRTC 时遇到了一个问题,即 RTCPeerConnection.ontrack 事件不会在创建新的 MediaStreamTrack 对象时触发(通过 RTCPeerConnectio
我的简单 WebRTC javascript 代码没有按预期工作。事实上,音频通话并没有建立(请注意,我对 WebRTC 了解最少,我是通过查看互联网上的示例创建的)。该页面应启动两个参与者之间的音频
我是一名优秀的程序员,十分优秀!