Wenn ich die IP-Adresse des Geräts lese, erhalte ich immer die lokale IP-Adresse.
Ich benutze das folgende Code-Snippet, um das zu tun.
%Vor%Aber ich muss die externe IP-Adresse lesen, ohne einen externen Host oder eine Web-API wie Ссылка
zu verwendenDie meisten Antworten sind völlig korrekt. Am besten wäre es, einen externen Dienst zu haben, mit dem Sie sich verbinden, und dieser Dienst antwortet mit Ihrer öffentlichen IP-Adresse. Es gibt jedoch Gründe, warum Sie sich nicht mit einem externen Dienst verbinden möchten (1), Sie wollen einfach nicht Ihren eigenen Dienst betreiben oder für einen Drittanbieter-Dienst zahlen, und (2) Ihre Anwendung sollte im "Stealth" -Modus laufen und nicht immer nur einen Service im Internet kontaktieren.
Sie können sich jedoch auf eine 100% reine Java-Traceroute-Implementierung verlassen, wie sie hier vorgestellt wird: Ссылка
Wenn Sie sich in die Implementierung von traceroute einklinken, können Sie auf Ihrem Weg zum Internet einfach einen Host nach dem anderen anpingen. Auf diese Weise können Sie einfach beliebige öffentliche IP-Adressen "anpingen" und sehen, welche Route zum Ziel führt.
Wenn Sie sich den Trace ansehen, sehen Sie private (nicht geroutete) IP-Adressen, wie sie in den Netzwerken 192.168.0.0/16 und 10.0.0.0/8 vorkommen. Sie können davon ausgehen, dass dies private Adressen sind und die erste öffentliche IP-Adresse auf Ihrer Route Ihre öffentliche IP-Adresse ist.
Dies sollte auch für Szenarien funktionieren, in denen das Client-Gerät eine öffentliche IP-Adresse erhält, wie es bei einigen Mobilfunkanbietern oder akademischen Netzwerken der Fall ist.
Tags und Links java android traceroute android-networking nat-traversal