Как получить WAN IP от маршрутизатора с помощью UPnP / SSDP

2

Я пытаюсь найти способ заставить мой маршрутизатор сообщать мой WAN IP, используя UPnP / SSDP, но до сих пор я не смог даже получить список устройств доступа в Интернет, поддерживающих UPnP, в моей сети. Вот запрос, который я отправляю:

    $ cat request.txt
    M-SEARCH * HTTP/1.1
    HOST: 239.255.255.250:1900
    MAN: "ssdp:discover"
    MX: 3
    ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1

С помощью команды:

    $ nc -uvv 239.255.255.250 1900 < request.txt
    Connection to 239.255.255.250 1900 port [udp/ssdp] succeeded!

Я просто получаю сообщение об успешном соединении, а затем ничего ...

Может ли кто-нибудь дать мне какие-либо указатели (нет адреса памяти пожалуйста!) а что я делаю не так?

Обновить: Итак, я попытался с помощью tcpdump чтобы получить ответы вот что я получил:

    $ sudo tcpdump -vv -A -s 0 -i en1 udp port 1900 and host 239.255.255.250 
    …

    NOTIFY * HTTP/1.1
    Host: 239.255.255.250:1900
    Cache-Control: max-age=60
    Location: http://192.168.1.1:1780/InternetGatewayDevice.xml
    NTS: ssdp:alive
    Server: POSIX, UPnP/1.0 linux/5.100.104.2 
    NT: urn:schemas-upnp-org:device:InternetGatewayDevice:1

    …

Я предполагаю, что следующий шаг - проанализировать вывод tcpdump и отфильтровать все ответы, которые не содержат NT: urn:schemas-upnp-org:device:InternetGatewayDevice:1 Затем заголовок делает фактический запрос SOAP к маршрутизатору.

phor2
источник
Почему ваша команда 'nc' использует два параметра 'v'?
parsley72

Ответы:

3

Вам нужно будет использовать tcpdump или что-то подобное, чтобы увидеть ответ или ответы.

nc ищет ответ от конечной точки, на которую вы отправили запрос. Но конечная точка, к которой вы отправили запрос, является общей целью широковещания. Ответ будет получен не от общей цели широковещания, а от конкретного устройства, которое отвечает.

Как nc Выходные данные говорят, что это связано с целью вещания. Таким образом, он не увидит ответы от отвечающих устройств.

David Schwartz
источник
0

Хотя это задание довольно старое, я выкладываю ответ, который искал, сам.

Ваш UPnP-ответ опубликовал местоположение http://192.168.1.1:1780/InternetGatewayDevice.xml "

Там вы можете получить больше информации о формате данных. Для моего роутера: у меня есть больше путей к xmls. Звоня им, есть больше информации UPnP. в результате чего: Я звонил:

POST /upnp/control?WANIPConnection HTTP/1.1
Host: 192.168.1.1
SOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress"
Accept-Language: de-de;q=1, de;q=0.5
Accept-Encoding: gzip
Content-Type: text/xml; charset="utf-8"
User-Agent: gupnp-universal-cp GUPnP/0.20.10 DLNADOC/1.50
Connection: Keep-Alive
Content-Length: 281

<?xml version="1.0"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"></u:GetExternalIPAddress></s:Body></s:Envelope>

и получите в ответ:

HTTP/1.1 200 OK
EXT:
Content-Type: text/xml; charset="utf-8"
Date: Tue, 04 Aug 2015 23:55:01 GMT
Server: servername/2.0 UPnP/1.0 UPnP-Device-Host/1.0
Content-Length: 380

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <s:Body>
        <u:GetExternalIPAddressResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
            <NewExternalIPAddress>123.123.123.123</NewExternalIPAddress>
        </u:GetExternalIPAddressResponse>
    </s:Body>
</s:Envelope>

Я получил большую помощь от «Инспектора UPnP»

rundekugel
источник
0

Ты можешь использовать socat

$ socat -T1 STDIO UDP4-DATAGRAM:239.255.255.250:1900 < request.txt
Javier López
источник