我已经多次尝试使用具有正确登录名和密码的多台服务器,但没有得到任何答复。
$ports = array('5060','5061');
foreach($ports as $port){
$socket = fsockopen("71.170.105.118", $port, $errno, $errstr, 30);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: XXX\r\n");
fputs($socket, "Secret: XXX\r\n\r\n");
fputs($socket, "Action: Command\r\n");
fputs($socket, "Command: sip show peers\r\n\r\n");
$wrets=fgets($socket,128);
echo $wrets."¦".$errno."¦".$errstr."\n";
}
我收到此回复:
¦0¦
¦0¦
我希望确保凭据正确无误,以执行我的下一个命令。
谢谢
答案 0 :(得分:0)
您正在尝试连接到Asterisk AMI(Asterisk管理器接口),但是它可以与另一个端口一起使用,您可能会在常规部分的manager.conf
文件中找到正确的端口,其中包含以下内容:
[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¦
字符串,因此我将其重写了一下: / p>
$socket = fsockopen("XXX.XXX.XXX.XXX", '5038', $errno, $errstr, 30);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: admin\r\n");
fputs($socket, "Secret: XXXXXXX\r\n\r\n");
fputs($socket, "Action: Command\r\n");
fputs($socket, "Command: sip show peers\r\n\r\n");
fputs($socket, "Action: Logoff\r\n");
while ($wrets=fgets($socket)) {
var_dump($wrets);
}
所以,现在工作正常