Создайте сокет UDP, bind () для INADDR_ANY, подключите () к какому-либо адресу в Интернете, затем используйте getsockname () на сокете, чтобы узнать, какому адресу он был присвоен.
Другое хорошее решение, если сетевой протокол его поддерживает, - просто спросить своих партнеров по начальной загрузке, что они думают о вашем IP. Это позаботится о NAT автоматически.