Effektive Methode zum Erkennen von NAT-Netzwerken in Linux

Effektive Methode zum Erkennen von NAT-Netzwerken in Linux

In Ubuntu muss ich feststellen, ob die Netzwerk-IP-Adresse ein NAT-System ist (STUN ist nicht erforderlich).

Ich dachte, ich könnte den IP-Klassenbereichstyp folgendermaßen überprüfen:Überprüfen Sie, ob sich die IP-Adresse im privaten Netzwerkbereich befindet

Aber ich habe einen anderen Weg gesehen, mit NETLINK_ROUTE das lokale IP-System aus der Routentabelle des Kernel-Netzwerkstapels abzurufen

Vergleichen Sie diese IP mit der externen routbaren IP. Wenn sie gleich sind, handelt es sich bei dem Netzwerk nicht um ein NAT-System.

In Perl habe ich ein Modul IO::Socket::Netlink::Route gefunden, ich habe es getestet und es funktioniert

https://metacpan.org/pod/release/PEVANS/Socket-Netlink-Route-0.05/lib/IO/Socket/Netlink/Route.pm

Aber wenn man über die /sbin/ip-Route liest:

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

Über Rtnetlink

Rtnetlink allows the kernel's routing tables to be read

https://man7.org/linux/man-pages/man7/rtnetlink.7.html

Ich verwende bereits /sbin/ip route, um die Haupt-IP des aktiven Netzwerks zu erhalten, daher möchte ich die Installation eines weiteren Moduls vermeiden und verwende IP route nur zur Erkennung des NAT-Systems.

Ist mein Ansatz richtig?

verwandte Informationen