So erhalten Sie die WAN-IP von einem Router mit UPnP / SSDP

2

Ich versuche, meinen Router dazu zu bringen, meine WAN-IP über UPnP / SSDP zurückzumelden, aber bisher konnte ich nicht einmal eine Liste von UPnP-unterstützten Internetzugriffsgeräten in meinem Netzwerk abrufen. Hier ist die Anfrage, die ich sende:

    $ 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

Mit dem Befehl:

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

Ich bekomme nur die Meldung Verbindung erfolgreich und dann nichts ...

Könnte mir jemand einen Hinweis geben (nein Speicheradressen bitte!) was mache ich falsch

Aktualisieren: Ok, also habe ich es versucht tcpdump Um Antworten zu erhalten, habe ich Folgendes erhalten:

    $ 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

    …

Ich denke, der nächste Schritt ist, die Ausgabe von tcpdump zu analysieren und alle Antworten herauszufiltern, die das nicht enthalten NT: urn:schemas-upnp-org:device:InternetGatewayDevice:1 Der Header sendet dann die eigentliche SOAP-Anfrage an den Router.

phor2
quelle
Warum verwendet Ihr 'nc'-Befehl zwei' v'-Parameter?
parsley72

Antworten:

3

Sie müssen verwenden tcpdump oder etwas ähnliches, um die Antwort oder die Antworten zu sehen.

nc sucht nach einer Antwort von dem Endpunkt, an den Sie die Anfrage gesendet haben. Der Endpunkt, an den Sie die Anforderung gesendet haben, ist jedoch ein allgemeines Broadcast-Ziel. Die Antwort kommt nicht von einem allgemeinen Broadcast-Ziel, sondern von dem spezifischen Gerät, das antwortet.

Wie nc Die Ausgabe besagt, dass eine Verbindung zum Broadcast-Ziel besteht. Daher werden die Antworten der antwortenden Geräte nicht angezeigt.

David Schwartz
quelle
0

Obwohl diese Aufgabe ziemlich alt ist, poste ich die Antwort, nach der ich gesucht habe, selbst.

Ihre UPnP-Antwort hat den Ort gepostet " http://192.168.1.1:1780/InternetGatewayDevice.xml "

Dort erhalten Sie weitere Informationen zum Datenformat. Für meinen Router: Ich habe dort mehr Pfade zu xmls. Wenn Sie sie anrufen, gibt es mehr UPnP-Informationen. Daraus ergibt sich: Ich rief:

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>

und als Antwort bekommen:

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>

Ich habe viel Hilfe vom "UPnP Inspector"

rundekugel
quelle
0

Sie können verwenden socat

$ socat -T1 STDIO UDP4-DATAGRAM:239.255.255.250:1900 < request.txt
Javier López
quelle