В Ubuntu мне нужно определить, является ли сетевой IP-адрес системой NAT (не нужен STUN)
Я подумал, что проверить диапазон классов IP можно так:Проверьте, находится ли IP-адрес в частном сетевом пространстве.
Но я видел другой способ, используя NETLINK_ROUTE получить локальный IP-адрес системы из таблицы маршрутизации сетевого стека ядра
Сравните этот IP с внешним маршрутизируемым IP, если они равны, сеть не является системой NAT.
В Perl я нашел модуль IO::Socket::Netlink::Route, я проверил и он работает.
https://metacpan.org/pod/release/PEVANS/Socket-Netlink-Route-0.05/lib/IO/Socket/Netlink/Route.pm
Но читаем о маршруте /sbin/ip:
All operations with the ip route command are atomic, so each command will return either RTNETLINK answers
http://linux-ip.net/html/tools-ip-route.html
О Rtnetlink
Rtnetlink allows the kernel's routing tables to be read
https://man7.org/linux/man-pages/man7/rtnetlink.7.html
Я уже использую маршрут /sbin/ip для получения основного IP-адреса активной сети, поэтому я хочу избежать установки другого модуля и просто использовал маршрут ip для обнаружения системы NAT.
Правильный ли мой подход?