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
나는 활성 네트워크의 기본 IP를 얻기 위해 이미 /sbin/ip 경로를 사용하고 있으므로 다른 모듈을 설치하는 것을 피하고 NAT 감지 시스템을 수행하기 위해 ip 경로를 사용했습니다.
내 접근 방식이 맞습니까?