Я пытаюсь найти способ заставить мой маршрутизатор сообщать мой 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 к маршрутизатору.