在 Linux 中检测 NAT 网络的有效方法

在 Linux 中检测 NAT 网络的有效方法

在 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 系统。

我的方法正确吗?

相关内容