Como obter o IP da WAN de um roteador usando UPnP / SSDP

2

Estou tentando encontrar uma maneira de obter meu roteador para relatar meu IP da WAN usando UPnP / SSDP, mas até agora não consegui nem obter uma lista de UPnP que suporte dispositivos de acesso à Internet na minha rede. Aqui está o pedido que estou enviando:

    $ 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

Com o comando:

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

Acabei de receber a mensagem de conexão vencida e, em seguida, nada ...

Alguém poderia me dar alguns ponteiros (sem endereços de memória , por favor!) sobre o que estou fazendo de errado?

Atualização: Ok, então eu tentei usar tcpdump para obter respostas. O que eu recebi é o seguinte:

    $ 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

    …

Eu acho que o próximo passo é analisar a saída do tcpdump e filtrar todas as respostas que não contenham o cabeçalho NT: urn:schemas-upnp-org:device:InternetGatewayDevice:1 , então faça a solicitação SOAP real para o roteador.

    
por phor2 03.05.2012 / 20:58

3 respostas

3

Você precisará usar tcpdump ou algo semelhante para ver a resposta ou respostas.

nc está procurando uma resposta do ponto de extremidade para o qual você enviou a solicitação. Mas o endpoint para o qual você enviou a solicitação é um destino de transmissão genérico. A resposta virá não de um alvo de transmissão genérico, mas do dispositivo específico que responde.

Como a saída de nc diz, ele se conectou ao destino da transmissão. Então, não vai ver as respostas que vêm dos dispositivos de resposta.

    
por 03.05.2012 / 23:02
0

Embora, esta tarefa seja bastante antiga, eu posto a resposta, eu estava procurando, eu mesmo.

Sua resposta UPnP postou o local " link "

Lá você pode obter mais informações sobre o formato de dados. Para o meu roteador: cheguei lá mais caminhos para o xmls. Chamando-os, há mais informações UPnP. resultando nisso: Eu liguei:

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>

e receba como resposta:

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>

Tenho muita ajuda do "Inspetor UPnP"

    
por 05.08.2015 / 02:01
0

Você pode usar socat

$ socat -T1 STDIO UDP4-DATAGRAM:239.255.255.250:1900 < request.txt
    
por 22.01.2016 / 14:12