ONVIF GetSystemDateAndTime запрос

Как только я получаю ответ от Многоадресного запроса UDP до 239.255.255.250

Я получаю пробный матч с XAddrs http://10.10.10.10:1234/onvif/device_service

Как мне теперь сделать GetSystemDateAndTime и GetDeviceInformation

это запрос TCP/UDP на порт 10.10.10.10 1234 ? Это HTTP-запрос на порт 10.10.10.10 80 ?

или что, как только у меня есть адрес устройства http:10.10.10.10:1234/onvif/device_service

после чего

спасибо заранее

3 ответов


вам нужно отправить туда только HTTP-запрос, поскольку SOAP работает по HTTP. Например, через CURL это было бы так:

curl 10.10.10.10:1234/onvif/device_service -d '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>'

в результате вы получите что-то подобное с некоторыми заголовками:

<tds:GetSystemDateAndTimeResponse>
    <tds:SystemDateAndTime>
        <tt:DateTimeType>Manual</tt:DateTimeType>
        <tt:DaylightSavings>false</tt:DaylightSavings>
        <tt:TimeZone>
            <tt:TZ>MoroccoStandardTime0</tt:TZ>
        </tt:TimeZone>
        <tt:UTCDateTime>
            <tt:Time>
                <tt:Hour>10</tt:Hour>
                <tt:Minute>5</tt:Minute>
                <tt:Second>35</tt:Second>
            </tt:Time>
            <tt:Date>
                <tt:Year>2014</tt:Year>
                <tt:Month>3</tt:Month>
                <tt:Day>14</tt:Day>
            </tt:Date>
        </tt:UTCDateTime>
    </tds:SystemDateAndTime>
</tds:GetSystemDateAndTimeResponse>

а также не забывайте, что большинство действий требует заголовки Authorization в запрос.

проверка подлинности

на ONVIF руководство программиста приложения на странице 35 описана как auth сделано. Например, это выглядит так:

<s:Header>
    <Security s:mustUnderstand="1" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <UsernameToken>
            <Username>admin</Username>
            <Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">MuMnyh3wTxGWOCc=</Password>
            <Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">8Qqve9KCkNhQAAAAAAA==</Nonce>
            <Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2014-03-04T14:03:05.130Z</Created>
        </UsernameToken>
    </Security>
</s:Header>

@Kirix решение не работает для моей конкретной камеры. Однако после огромного количества изучения кода и trail / error.. Я определил, что камеры Trendnet у меня настаивает на заголовок совершенства. Я вычислил вариант завитка:

curl http://192.168.xxx.xxx/onvif/device_service --data '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><GetSystemDateAndTime xmlns="http://www.onvif.org/ver10/device/wsdl"/></s:Body></s:Envelope>' --header 'Content-Type: application/soap+xml; charset=utf-8; action="http://www.onvif.org/ver10/device/wsdl/GetSystemDateAndTime";'

в вашем случае http://10.10.10.10:1234/onvif/device_service - адрес службы управления устройствами. Вам нужно отправить GetSystemDateAndTime запрос согласно протоколу SOAP.

как отправлять такие запросы, зависит от системы, которую вы работаете. Вы можете использовать Visual Studio или gsoap (есть часто задаваемые вопросы о ONVIF)