在 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 route 来获取活动网络的主 ip,所以我想避免安装另一个模块,而只是使用 ip route 来检测 NAT 系统。
我的方法正确吗?