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

ip-route は、IP アドレスを 1 つ以上の ip ルート ノードにコピーします。

Rtnetlinkについて

Rtnetlink allows the kernel's routing tables to be read

詳しくは、man7.org/linux/man-pages/man7/rtnetlink.7.html をご覧ください。

アクティブ ネットワークのメイン IP を取得するためにすでに /sbin/ip route を使用しているため、別のモジュールのインストールを避け、NAT システムを検出するために ip route を使用しました。

私のアプローチは正しいでしょうか?

関連情報