Ist es möglich, die IP-Adresse des Geräts mit einem Code abzurufen?
android
ip-address
Nilesh Tupe
quelle
quelle
Antworten:
Dies ist mein Hilfsdienst zum Lesen von IP- und MAC-Adressen. Die Implementierung ist Pure-Java, aber ich habe einen Kommentarblock, in
getMACAddress()
dem der Wert aus der speziellen Linux-Datei (Android) gelesen werden kann. Ich habe diesen Code nur auf wenigen Geräten und Emulator ausgeführt, aber lassen Sie mich hier wissen, wenn Sie seltsame Ergebnisse finden.Utils.java
quelle
toUpperCase()
. Das FangenException
ist immer zweifelhaft (und Hilfsmethoden sollten trotzdem werfen und den Anrufer mit der Ausnahme befassen lassen - hat dies jedoch nicht geändert). Formatierung: sollte nicht mehr als 80 Zeilen umfassen. Bedingte Ausführung fürgetHardwareAddress()
- Patch: github.com/Utumno/AndroidHelpers/commit/… . Was du sagst ?Das hat bei mir funktioniert:
quelle
getHostAddress()
diese Option , die sowohl IPv4- als auch IPv6-Adressen unterstützt. Diese Methode unterstützt keine IPv6-Adressen.Ich habe folgenden Code verwendet: Der Grund, warum ich hashCode verwendet habe, war, dass bei der Verwendung einige Garbage-Werte an die IP-Adresse angehängt wurden
getHostAddress
. AberhashCode
hat wirklich gut für mich funktioniert, da ich dann Formatter verwenden kann, um die IP-Adresse mit der richtigen Formatierung zu erhalten.Hier ist die Beispielausgabe:
1.Verwenden
getHostAddress
:***** IP=fe80::65ca:a13d:ea5a:233d%rmnet_sdio0
2.Verwenden
hashCode
undFormatter
:***** IP=238.194.77.212
Wie Sie sehen können, gibt mir die 2. Methode genau das, was ich brauche.
quelle
getHostAddress()
wird das gleiche tun wie das Formatierungsmaterial, das Sie hinzugefügt haben.Ich habe
inetAddress
instanceof hinzugefügtInet4Address
, um zu überprüfen, ob es sich um eine IPv4-Adresse handelt.quelle
Obwohl es eine richtige Antwort gibt, teile ich meine Antwort hier und hoffe, dass dieser Weg mehr Komfort bietet.
quelle
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Der folgende Code könnte Ihnen helfen. Vergessen Sie nicht, Berechtigungen hinzuzufügen.
Fügen Sie die unten stehende Berechtigung in die Manifestdatei ein.
Viel Spaß beim Codieren !!
quelle
Sie müssen keine Berechtigungen hinzufügen, wie dies bei den bisher bereitgestellten Lösungen der Fall ist. Laden Sie diese Website als Zeichenfolge herunter:
http://www.ip-api.com/json
oder
http://www.telize.com/geoip
Das Herunterladen einer Website als Zeichenfolge kann mit Java-Code erfolgen:
http://www.itcuties.com/java/read-url-to-string/
Analysieren Sie das JSON-Objekt folgendermaßen:
https://stackoverflow.com/a/18998203/1987258
Das json-Attribut "query" oder "ip" enthält die IP-Adresse.
quelle
quelle
Die Methode getDeviceIpAddress gibt die IP-Adresse des Geräts zurück und bevorzugt die WLAN-Schnittstellenadresse, wenn eine Verbindung besteht.
quelle
Dies ist eine Überarbeitung dieser Antwort, bei der irrelevante Informationen entfernt, hilfreiche Kommentare hinzugefügt, Variablen klarer benannt und die Logik verbessert werden.
Vergessen Sie nicht, die folgenden Berechtigungen anzugeben:
InternetHelper.java:
quelle
Kotlin minimalistische Version
quelle
quelle
Verwenden Sie einfach Volley, um die IP von dieser Seite zu erhalten
quelle
In letzter Zeit wird eine IP-Adresse immer noch zurückgegeben,
getLocalIpAddress()
obwohl sie vom Netzwerk getrennt wurde (keine Dienstanzeige). Dies bedeutet, dass die unter Einstellungen> Über Telefon> Status angezeigte IP-Adresse von der Meinung der Anwendung abweicht.Ich habe eine Problemumgehung implementiert, indem ich diesen Code zuvor hinzugefügt habe:
Läutet das jemandem eine Glocke?
quelle
in Kotlin ohne Formatierer
quelle
In Ihrer Aktivität gibt die folgende Funktion
getIpAddress(context)
die IP-Adresse des Telefons zurück:quelle
Hier ist die Kotlin-Version von @Nilesh und @anargund
quelle
Ein Gerät verfügt möglicherweise über mehrere IP-Adressen, und die in einer bestimmten App verwendete IP-Adresse ist möglicherweise nicht die IP-Adresse, die Server, die die Anforderung empfangen, sehen. In der Tat verwenden einige Benutzer ein VPN oder einen Proxy wie Cloudflare Warp .
Wenn Sie die IP-Adresse abrufen möchten , die von Servern angezeigt wird, die Anforderungen von Ihrem Gerät empfangen, sollten Sie am besten einen IP- Geolokalisierungsdienst wie Ipregistry abfragen (Haftungsausschluss: Ich arbeite für das Unternehmen) mit seinem Java-Client :
https://github.com/ipregistry/ipregistry-java
Sie sind nicht nur sehr einfach zu bedienen, sondern erhalten auch zusätzliche Informationen wie Land, Sprache, Währung, Zeitzone für die Geräte-IP und können feststellen, ob der Benutzer einen Proxy verwendet.
quelle
Dies ist der einfachste und einfachste Weg, den es jemals im Internet gab ... Fügen Sie zunächst diese Berechtigung zu Ihrer Manifestdatei hinzu ...
"INTERNET"
"ACCESS_NETWORK_STATE"
Fügen Sie dies in die onCreate-Datei von Activity ein.
Fügen Sie diese Funktion nun Ihrer MainActivity.class hinzu.
quelle
Wenn Sie eine Muschel haben; ifconfig eth0 funktionierte auch für x86-Geräte
quelle
Bitte überprüfen Sie diesen Code ... Verwenden Sie diesen Code. Wir werden IP aus dem mobilen Internet bekommen ...
quelle
Ich mache kein Android, aber ich würde das ganz anders angehen.
Senden Sie eine Anfrage an Google, etwa: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=my%20ip
Lesen Sie auch das HTML-Feld, in dem die Antwort veröffentlicht wird. Sie können auch direkt an die Quelle abfragen.
Google wird am liebsten länger als Ihre Anwendung dort sein.
Denken Sie daran, es könnte sein, dass Ihr Benutzer zu diesem Zeitpunkt kein Internet hat. Was möchten Sie tun?
Viel Glück
quelle
Du kannst das
quelle
quelle
Ehrlich gesagt bin ich mit der Codesicherheit nur wenig vertraut, daher kann dies hackig sein. Aber für mich ist dies der vielseitigste Weg, dies zu tun:
quelle
Zusammenstellung einiger Ideen, um die WLAN-IP-
WifiManager
Adresse in einer schöneren Kotlin-Lösung zu erhalten:Alternativ können Sie die IP-Adressen von IP4-Loopback-Geräten über Folgendes abrufen
NetworkInterface
:quelle
Basierend auf dem, was ich getestet habe, ist dies mein Vorschlag
quelle