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 を使用しました。
私のアプローチは正しいでしょうか?