我已经尝试了很多次使用具有正确登录名和密码的多服务器,但我没有得到任何回复。
$ports = array('5060','5061');
foreach($ports as $port){
$socket = fsockopen("71.170.105.118", $port, $errno, $errstr, 30);
fputs($socket, "Action: Loginrn");
fputs($socket, "UserName: XXXrn");
fputs($socket, "Secret: XXXrnrn");
fputs($socket, "Action: Commandrn");
fputs($socket, "Command: sip show peersrnrn");
$wrets=fgets($socket,128);
echo $wrets."¦".$errno."¦".$errstr."n";
}
我得到这个回复:
¦0¦
¦0¦
我希望确保凭据是否正确,以便执行我的下一个命令。
谢谢
您正在尝试连接到Asterisk AMI(Asterisk Manager界面(,但它适用于另一个端口,您可以在常规部分中的manager.conf
文件中找到正确的端口,my包含以下内容:
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
displayconnects=no ;only effects 1.6+
所以,如您所见,端口是 5038 而不是 5060 和 5061,但是当我尝试与您的代码连接时,它只返回Asterisk Call Manager/2.10.4 ¦0¦
字符串,所以我重写了一点:
$socket = fsockopen("XXX.XXX.XXX.XXX", '5038', $errno, $errstr, 30);
fputs($socket, "Action: Loginrn");
fputs($socket, "UserName: adminrn");
fputs($socket, "Secret: XXXXXXXrnrn");
fputs($socket, "Action: Commandrn");
fputs($socket, "Command: sip show peersrnrn");
fputs($socket, "Action: Logoffrn");
while ($wrets=fgets($socket)) {
var_dump($wrets);
}
所以,现在它工作正常