Webrtc STUN/TURN服务器连接测试

Webrtc STUN/TURN服务器连接测试,webrtc,stun,turn,Webrtc,Stun,Turn,我试图找出如何测试昏迷/转身服务器是否处于活动状态并正确响应连接。理想情况下,该测试应在外部机器上执行,以防在这种情况下晕机/转弯机器停机,连接测试也应报告 过去有人调查过这个案子吗?推荐什么解决方案?您可以在此处测试您的服务器 编辑:github.io中的一个不错的实现,取自对另一个答案的评论(在IceTransports值中选择“中继”): 按照Benjamin Trent的建议,我编写了以下代码来测试TURN服务器的连接性,在firefox和chrome上都可以使用: 功能检查Turn

我试图找出如何测试昏迷/转身服务器是否处于活动状态并正确响应连接。理想情况下,该测试应在外部机器上执行,以防在这种情况下晕机/转弯机器停机,连接测试也应报告


过去有人调查过这个案子吗?推荐什么解决方案?

您可以在此处测试您的服务器


编辑:github.io中的一个不错的实现,取自对另一个答案的评论(在IceTransports值中选择“中继”):


按照Benjamin Trent的建议,我编写了以下代码来测试TURN服务器的连接性,在firefox和chrome上都可以使用:

功能检查TurnServer(turnConfig,超时){
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
如果(承诺人解决)返回;
决议(假);
promisersolved=真;
},超时| | 5000);
var promiseResolved=false
,myPeerConnection=window.rtpeerconnection | | | window.mozrtpeerconnection | | | window.webkirtpeerconnection//与firefox和chrome的兼容性
,pc=new myPeerConnection({iceServers:[turnConfig]})
,noop=function(){};
pc.createDataChannel(“”;//创建虚假数据通道
pc.createOffer(功能(sdp){
如果(sdp.sdp.indexOf('typ relay')>-1{//有时sdp包含ice候选项。。。
promisersolved=真;
决心(正确);
}
pc.setLocalDescription(sdp、noop、noop);
},noop);//创建报价并设置本地描述
pc.onicecandidate=函数(ice){//侦听候选事件
如果(promisersolved | | | | |!ice.candidate | |!ice.candidate.candidate | |!(ice.candidate.candidate.indexOf('typ relay')>-1))返回;
promisersolved=真;
决心(正确);
};
});   
}
用法示例:

checkTURNServer({
URL:'turn:127.0.0.1',
用户名:“测试”,
凭证:“测试”
}).then(函数(bool){
log('TURN server active',bool?'yes':'no');
}).catch(console.error.bind(console));
您可以运行以下代码段进行检查:

var res=id('result');
id('button')。onclick=function(){
res.innerHTML='正在检查回合服务器…';
var url='turn:'+id('url')。value+':'+id('port')。value,
useUDP=id('udp')。已选中;
url+='?传输='+(使用udp?'udp':'tcp');
checkTURNServer({
url:url,
用户名:id('name')。值,
凭证:id('pass')。值
},id('time')。值)。然后(函数(bool){
如果(bool)
res.innerHTML='是的,TURN服务器工作…';
其他的
抛出新错误(“不工作”);
}).catch(函数(e){
控制台日志(e);
res.innerHTML='翻转服务器不工作';
});
};
功能检查TurnServer(turnConfig,超时){
log('turnConfig:',turnConfig);
返回新承诺(功能(解决、拒绝){
setTimeout(函数(){
如果(承诺人解决)返回;
决议(假);
promisersolved=真;
},超时| | 5000);
var promiseResolved=false
,myPeerConnection=window.rtpeerconnection | | | window.mozrtpeerconnection | | | window.webkirtpeerconnection//与firefox和chrome的兼容性
,pc=new myPeerConnection({iceServers:[turnConfig]})
,noop=function(){};
pc.createDataChannel(“”;//创建虚假数据通道
pc.createOffer(功能(sdp){
如果(sdp.sdp.indexOf('typ relay')>-1{//有时sdp包含ice候选项。。。
promisersolved=真;
决心(正确);
}
pc.setLocalDescription(sdp、noop、noop);
},noop);//创建报价并设置本地描述
pc.onicecandidate=函数(ice){//侦听候选事件
如果(promisersolved | | | | |!ice.candidate | |!ice.candidate.candidate | |!(ice.candidate.candidate.indexOf('typ relay')>-1))返回;
promisersolved=真;
决心(正确);
};
});   
}
函数id(val){
返回文档.getElementById(val);
}
#url{
宽度:250px;
}
#港口{
宽度:70px;
}

测试回合服务器
转网址:
端口:
传输:TCP
UDP
用户名:
密码:
检查超时:
检查回合服务器

测试你的回合和眩晕服务器

你可以设置第三方监控服务(我们使用Monitis),甚至你自己的机器,每分钟从一个或多个位置PING一次服务器。但是,这只会告诉您服务器是否可以访问,而不一定告诉您TURN/STUN应用程序服务器是否仍然接受并响应TURN/STUN数据包


STUN/TURN的服务器端监控库将是一个很棒的GitHub项目。

版本的@mido函数用于检查TURN和STUN服务器(原始拒绝STUN服务器):


如果要经常检查stun服务器,可以使用cron执行以下命令:

stunserver=stun1.l.google.com;stunport=19302;listenport=20000;echo -ne "\x00\x01\x00\x00YOGO\x59\x4f\x47\x4fSTACFLOW" | nc -u -p $listenport $stunserver $stunport -w 0;timeout 1 nc -l -u $listenport | head -c 32 | tail -c 4 | hexdump -e '/1 "%u" "."' | grep -o ".*[^.]" && echo yes-no-problem || mail -s "Error in Tun server:$stunserver:$stunport" root@localhost <<< 'Error in Tun server'
stunserver=stun1.l.google.com;stunport=19302;listenport=20000;echo-ne“\x00\x01\x00\x00YOGO\x59\x4f\x47\x4fSTACFLOW”| nc-u-p$listenport$stunserver$stunport-w 0;超时1 nc-l-u$listenport | head-c32 | tail-c4 | hextump-e'/1“%u”。“| grep-o”*[^.]”和&echo yes no problem | mail-s“Tun服务器中的错误:$stunserver:$stunport”root@localhostnpm我晕过去了

const stun = require('stun');

stun.request('stun.l.google.com:19302', (err, res) => {
  if (err) {
    console.error(err);
  } else {
    const { address } = res.getXorAddress();
    console.log('your ip', address);
  }
});

如果您对coturn服务器使用username:password身份验证机制,则前面的答案适用于TURN。但是,与BigBlueButton和其他使用
静态身份验证密码的情况一样,如
/etc/turnserver.conf
所示,不可能使用

仍然测试TURN服务器的一种方法是使用
sudo-apt-install-coturn
或您各自的软件包管理器安装
turnutils\u-uclient
。随后,您可以使用(替换XXXX和turn.example.com)对其进行测试:

这将导致以下输出(经修订的IP地址192.168.0
const stun = require('stun');

stun.request('stun.l.google.com:19302', (err, res) => {
  if (err) {
    console.error(err);
  } else {
    const { address } = res.getXorAddress();
    console.log('your ip', address);
  }
});
use-auth-secret
static-auth-secret=XXXX
turnutils_uclient -T -W XXXX turn.example.com
0: IPv4. Connected from: 192.168.0.2:50988
0: IPv4. Connected to: 1.2.3.4:3478
0: allocate sent
0: allocate response received: 
0: allocate sent
0: allocate response received: 
0: success
0: IPv4. Received relay addr: 1.2.3.4:56365
....
4: Total transmit time is 4
4: Total lost packets 0 (0.000000%), total send dropped 0 (0.000000%)
4: Average round trip delay 32.500000 ms; min = 15 ms, max = 56 ms
4: Average jitter 12.600000 ms; min = 0 ms, max = 41 ms