Эффективный способ обнаружения сети NAT внутри Linux

Эффективный способ обнаружения сети NAT внутри Linux

В 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.

Правильный ли мой подход?

Связанный контент