Тема: sip-cda2 relay
на форуме https://komendant.pro/spr/viewthread/90626/P0/ задавался вопрос: “Почему-то не получается заменить API простым дёрганием страницы curl -X POST “http://admin:masterkey@10.10.0.1/_control.html” -d ‘relay2=1’ В чём может быть проблема?”
вы ответили: “Такое не предусмотрено. Ваша задача решается полным постом страницы.”
что такое полный пост страницы? и чем он отличается от обычного пост запроса? как сделать этот самый полный пост страницы не нажимая кнопку вручную?
TCP пакет такого вида
POST /_control.html HTTP/1.1
Host: 192.168.0.141
Connection: keep-alive
Content-Length: 10
Cache-Control: max-age=0
Authorization: Basic YWRtaW46bWFzdGVya2V5
Origin: http://192.168.0.141
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: text/plain
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://192.168.0.141/_control.html
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
relay2=1
Приведенный пример представляет из себя неизвестно чем сгенерированный скрипт, который не работает.
TCP пакет такого вида
отправляю пакет такого вида на устройство, все ip в пакете заменены на соответствующие, пароль по умолчанию. приходит вот такой ответ:
HTTP/1.0 401 Authorization Required
WWW-Authenticate: Basic realm=“SIP-DP”
Connection: close
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 1656
далее контент html страницы
Потому что отправили пакет без авторизации
Нужно еще вот это
Authorization: Basic YWRtaW46bWFzdGVya2V5
пароль зашифрован base64
Потому что отправили пакет без авторизации
в том то и дело, что хедер Authorization присутствует, и его значение точно такое же, как в пакетах, отправляемых браузером, когда заходишь в веб интерфейс
пакет отправляю перенаправлением вывода в /dev/tcp/%SIP-CDA2-IP%/80
В чем-то есть отличие, Authorization Required выдается только, если нет Authorization.
В чем-то есть отличие, Authorization Required выдается только, если нет Authorization.
отправляю через /dev/tcp пакет того вида, как в первом ответе
запрос:
POST /_control.html HTTP/1.1
Host: 192.168.0.127
Connection: keep-alive
Content-Length: 10
Cache-Control: max-age=0
Authorization: Basic YWRtaW46bWFzdGVya2V5
Origin: http://192.168.0.127
Upgrade-Insecure-Requests: 1
DNT: 1
Content-Type: text/plain
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,\*/\*;q=0.8,application/signed-exchange;v=b3
Referer: http://192.168.0.127/_control.html
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
relay1=1
ответ:
HTTP/1.0 401 Authorization Required
...
реле соответственно не срабатывает
далее запрос через браузер, с помощью веб интерфейса
запрос:
POST /_control.html HTTP/1.1
Host: 192.168.0.127
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,\*/\*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.127/_control.html
Content-Type: text/plain
Content-Length: 10
DNT: 1
Authorization: Basic YWRtaW46bWFzdGVya2V5
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
relay1=1
ответ:
HTTP/1.1 302 Found
...
реле срабатывает
и третий вариант, похожий запрос, отправленный через postman
запрос:
POST /_control.html HTTP/1.1
Content-Type: text/plain
Host: 192.168.0.127
DNT: 1
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Origin: http://192.168.0.127
Referer: http://192.168.0.127/_control.html
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Authorization: Basic YWRtaW46bWFzdGVya2V5
User-Agent: PostmanRuntime/7.15.2
Accept: \*/\*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate
Content-Length: 9
Connection: keep-alive
relay1=1
ответ:
HTTP/1.1 302 Found
...
код ответа как в браузере, но реле не срабатывает
В первом варианте, возможно затесался лишний пробел или в конце нет \r\n.
Третий вариант не срабатывает реле скорее всего потому, что в конце не \r\n, а \n, т.к. Content-Length: 9, а не 10.
В первом варианте, возможно затесался лишний пробел или в конце нет \r\n.
Третий вариант не срабатывает реле скорее всего потому, что в конце не \r\n, а \n, т.к. Content-Length: 9, а не 10.
действительно, после сохранения файла с пакетом с CRLF вместо LF все заработало. спасибо за помощь
возможно ли сделать, чтобы веб сервер sip-cda понимал помимо CRLF, хотя бы еще LF?
кроме этого, еще имеется проблема с незакрывающимся сокетом. из-за этого возникают проблемы с получением ответа от веб сервера
также есть вопрос, по поводу того, как по ответу веб сервера гарантированно определить сработало ли реле?
Доработать можно многое, был бы спрос. Ваши замечания конечно же приняты к сведению. На данном этапе всецело занимаемся расширением основного функционала. Возможно в будущем, добьем и это, если конечно подобное будет интересно хоть одной сервисной компании или оператору связи, реально внедряющим адаптер в массовом сегменте. Пока, от подобных компаний есть интерес только к функциям импорта / экспорта (вместо API) которые можно будет выполнять массово в автоматическом режиме. Потому это скоро будет.
В том же, чем вы сейчас занимаетесь, есть основания полагать, что без полного парсинга страниц вам не обойтись (это и ответ на последний вопрос).
Доработать можно многое, был бы спрос. Ваши замечания конечно же приняты к сведению. На данном этапе всецело занимаемся расширением основного функционала. Возможно в будущем, добьем и это, если конечно подобное будет интересно хоть одной сервисной компании или оператору связи, реально внедряющим адаптер в массовом сегменте. Пока, от подобных компаний есть интерес только к функциям импорта / экспорта (вместо API) которые можно будет выполнять массово в автоматическом режиме. Потому это скоро будет.
В том же, чем вы сейчас занимаетесь, есть основания полагать, что без полного парсинга страниц вам не обойтись (это и ответ на последний вопрос).
Но, на данный момент и веб сервер можно было бы использовать в качестве апи, если бы он корректно обрабатывал line endings, закрывал сокет и возвращал разные статусы. В таком случае, скорее всего, можно было бы и существующим импортом/экспортом пользоваться(если знать как работать с этими проприетарными форматами, которые являются “копией флеш-памяти процессора”, документация по которым доступна только оптовикам)
также не понятно чем будет отличаться новый импорт/экспорт от существующего
На данный момент, у тех, кому нужна автоматизация (опять же - сервисные компании и операторы связи, которые цепляют наше железо к своему ПО), все нормально работает. И страницы парсятся, и данные постятся. Поймите правильно. Подстраиваться под эксперименты / игротеку частного клиента, а равно единично использующих оборудование и/или пытающихся делать с оборудованием ради любопытства что-то не регламентированное, мы не имеем физической возможности. Но, повторюсь, вами сказанное принято к сведению.
На данный момент, у тех, кому нужна автоматизация (опять же - сервисные компании и операторы связи, которые цепляют наше железо к своему ПО), все нормально работает. И страницы парсятся, и данные постятся. Поймите правильно. Подстраиваться под эксперименты / игротеку частного клиента, а равно единично использующих оборудование и/или пытающихся делать с оборудованием ради любопытства что-то не регламентированное, мы не имеем физической возможности. Но, повторюсь, вами сказанное принято к сведению.
дело в том, что, насколько я понимаю, наше руководство настроено становиться оптовым клиентом. сейчас мы купили данное устройство в одном экземпляре и пытаемся понять как нам с ним работать, когда их станет больше чем 1. на данный момент нас не устраивает, что, для того чтобы активировать реле нужно слать пакет вручную, потому что веб сервер устройства понимает только windows line endings(из-за ручной отправки добавляются большие сложности при загрузке конфигурации или базы абонентов так как там multipart form data которая разбивается на множество пакетов). не устраивает и то, что нет вообще никакой документации по автоматизации.
парсить html и доставать оттуда строку, когда на нодах нет даже id, мне кажется очень ненадежным решением, учитывая что парсить нужно не ответ, а страницу редиректа из location хедера. кроме того, эта страница может измениться при обновлении прошивки и парсинг перестанет работать. гораздо надежнее и удобнее было бы работать со статус кодом прямого ответа
Чтож, и этот взгляд вполне имеет право на существование, пусть даже и будучи на текущий момент единичным. Если наш адаптер не устраивает, чтож, выбор всегда за вами, мы на открытом рынке, рассматривайте предложения наших конкурентов. Все нами заявленное - работает, реагировать на каждое единичное нерегламентированное использование у нас возможности нет. В общем, остается только пожелать вам удачи.
Хотелось бы поднять этот же вопрос. Мы закупили несколько sip модулей и рассматриваем вопрос о становлении оптовым клиентом, но работать через парсинг страниц очень неудобно. Более того, насколько я понимаю, проблемы с кодировкой сохраняются на текущий момент. Если вопрос с API у вендора закрыт, то хотелось бы тогда пример с curl который отправит команду с данными relay1=1 на /_control.html, потому как сохранение в CRLF не сработало и Content-Length не равен 10 (как говорилось выше).