Ваш маршрутизатор должен знать свой собственный внешний IP-адрес, мой знает, и если я зайду на страницу состояния, я смогу прочитать ее.
программное обеспечение тоже может читать: например, я использую следующее в моем /etc/ddclient.conf
use=web, web='http://192.168.2.1/status_main.stm', web-skip='var wan_ip="'
Это позволяет программному обеспечению ddclient
получать внешний IP-адрес с этой страницы на моем маршрутизаторе. Ваш роутер, вероятно, будет отличаться в деталях, но он, вероятно, похож в обычной работе.
Удобная вещь о веб-сайтах, таких как http://icanhazip.com, состоит в том, что они работают для всех, нет необходимости искать роутер и пароль для входа на него, чтобы прочитать параметры соединения.
upnp - это еще один способ сделать это, например: https://stackoverflow.com/questions/799557/tring-to-get-nats-external-ipaddress-with-inatexternalipaddresscallback-in-cs