У меня есть несколько NVR (сетевых видеомагнитофонов) в нескольких местах, и я хочу проверить с php, если они работают.
Я хочу сделать это, подключившись к веб-серверу NVR с помощью имени пользователя и пароля.
Например, я создал имя пользователя (вы можете подключиться к нему, но, пожалуйста, не заливайте его):
Имя пользователя: пользователь
Пароль: A123456789
Страница авторизации: http://31.168.115.100/doc/page/login.asp
просмотрев исходный код nvr, я заметил, что кнопка входа в систему использует jquery, может ли она работать с php?
Я видел этот код:
$data = array(
'username' => 'user',
'password' => 'A123456789'
);
$url = 'http://31.168.115.100/doc/page/login.asp';
$ch = curl_init($url);
$postString = http_build_query($data, '', '&');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
print($response);
Но это не работает.
Другой способ подключения — получить ответ от протокола rtsp на порт 554, но я всегда получаю сообщение об ошибке сервера из-за аутентификации.
URL-адрес RTSP является
RTSP: // пользователь: [email protected]: 554 / Streaming / Каналы / 1201
это работает на VLC,
и код
function is_working($url){
$urlparsed = parse_url($url);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket == FALSE) return false;
if(@socket_connect($socket, $urlparsed['host'], $urlparsed['port'])){
$headers = array();
$headers[] = "DESCRIBE {$url} RTSP/1.0";
$headers[] = "User-Agent: WMPlayer/12.00.7600.16385 guid/3300AD50-2C39-46C0-AE0A-39E48EB3C868";
$headers[] = "Accept: application/sdp";
$headers[] = "Accept-Charset: UTF-8, *;q=0.1";
$headers[] = "X-Accept-Authentication: Negotiate, NTLM, Digest";
$headers[] = "Accept-Language: en-US, *;q=0.1";
$headers[] = "CSeq: 1";
$headerString = implode("\r\n", $headers) . "\r\n\r\n";
if(false === socket_write($socket, $headerString, strlen($headerString))){
socket_close($socket);
return 'false';
}else{
$response = '';
if(false === socket_recv($socket, $response, 2048,MSG_PEEK)){
socket_close($socket);
return false;
}else{
//var_dump($response);
if(strpos($response,"RTSP/1.0 200 OK") !== FALSE){
return 'connected';
}else{
return 'not connected';
}
socket_close($socket);
}
}
}else{
return 'false';
}
}
echo is_working("rtsp://user:[email protected]:554/Streaming/Channels/1201");
Что я пытаюсь сделать, это создать функцию, которую я пишу в функции URL, имя пользователя, пароль
и он вернется ко мне, если он подключен или нет.
Задача ещё не решена.
Других решений пока нет …