Просто запросите хост, который возвращает ваш IP-адрес:
$externalContent = file_get_contents('http://checkip.dyndns.com/');
preg_match('/Current IP Address: \[?([:.0-9a-fA-F]+)\]?/', $externalContent, $m);
$externalIp = $m[1];
или, настройте сервис, который просто отображает только IP, и используйте его следующим образом:
$externalIp = file_get_contents('http://yourdomain.example/ip/');
Настройте службу самостоятельно, просто отобразив удаленный IP-адрес, или заплатите кому-нибудь за его размещение. не используйте чужой сервер без разрешения.Ранее этот ответ был связан с моей службой, которая теперь работает несколько раз в секунду.
Обратите внимание, что в IP-сети с одним или несколькими NAT вы можете иметь несколько внешние IP-адреса.Это даст вам только один из них.
Кроме того, это решение, конечно, зависит от доступности удаленного хоста.Однако, поскольку не существует широко внедряемого стандарта (нет ISP, и только некоторые домашние маршрутизаторы реализуют UPnP ), нет другого способа получить ваш внешний IP-адрес.Даже если бы вы могли общаться с вашим локальным NAT, вы не могли быть уверены, что за ним нет другого NAT.