Описания цивилизованного способа я что-то припомню, кроме открытия сокета на каждый адрес для соединения с внешим адресом и смотреть, какой из них дал добро, но с локалкой будет проще несколько вариантов:
Есть резервированный диапозон для локалки - просто выявить принадлежность;
Если сеть сконфигурированна правильно, то маршрут по умолчанию будет смотреть в инет, а не в другую локалку - по маске можно определить принадлежность к нему внешнего IP;
Есть ище куча немереных способов (если подумать), вполть до тупого сравнения IP с вариантами в arp таблице - там будут соседи с локальными адресами. Например есть вариант, но у него есть и большое НО: В доке сказано, что внешний IP при правильной конфигурации хоста должен быть первичным, а локальный адрес в таком проядке считается альясом (мол, DNS так выдает записи типа А). Как бы можно и это использовать (первый адрес в структуре hostent списка h_addr_list - то что возвращает gethostbyname), НО это правильно работает только в UNIX, а форточках даже ping 255.255.255.255 не пашет. Если прибавить сюда горе-админов, котрые нормально сеть конфигурить не могут, то и остальные варианты проверки не помогут, если только не пускать все их сразу.