Czy można uzyskać adres IP urządzenia za pomocą kodu?
android
ip-address
Nilesh Tupe
źródło
źródło
Odpowiedzi:
To jest mój pomocnik używany do odczytu adresów IP i MAC. Implementacja jest czysta java, ale mam blok komentarzy, w
getMACAddress()
którym można odczytać wartość ze specjalnego pliku systemu Linux (Android). Uruchomiłem ten kod tylko na kilku urządzeniach i emulatorze, ale daj mi znać, jeśli znajdziesz dziwne wyniki.Utils.java
źródło
toUpperCase()
. ŁapanieException
jest zawsze niejasne (a metody pomocnicze i tak powinny rzucać i pozwolić osobie dzwoniącej poradzić sobie z wyjątkiem - jednak tego nie zmieniło). Formatowanie: nie powinno przekraczać 80 linii. Warunkowe wykonaniegetHardwareAddress()
- łatka: github.com/Utumno/AndroidHelpers/commit/… . Co mówisz ?To działało dla mnie:
źródło
getHostAddress()
, która obsługuje zarówno adresy IPv4, jak i IPv6. Ta metoda nie obsługuje adresów IPv6.Użyłem następującego kodu: Powodem, dla którego użyłem hashCode, było to, że dostawałem pewne wartości śmieci dołączane do adresu IP, gdy go używałem
getHostAddress
. AlehashCode
działało dla mnie naprawdę dobrze, ponieważ wtedy mogę użyć Formattera, aby uzyskać adres IP z prawidłowym formatowaniem.Oto przykładowy wynik:
1. przy użyciu
getHostAddress
:***** IP=fe80::65ca:a13d:ea5a:233d%rmnet_sdio0
2. korzystanie
hashCode
iFormatter
:***** IP=238.194.77.212
Jak widać 2. metody dają mi dokładnie to, czego potrzebuję.
źródło
getHostAddress()
zrobi to samo co dodane przez ciebie narzędzie do formatowania.Dodałem
inetAddress
instanceof,Inet4Address
aby sprawdzić, czy jest to adres IPv4.źródło
Chociaż istnieje poprawna odpowiedź, dzielę się tutaj moją odpowiedzią i mam nadzieję, że w ten sposób będzie wygodniej.
źródło
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Poniższy kod może ci pomóc. Nie zapomnij dodać uprawnień ..
Dodaj poniżej uprawnienia w pliku manifestu.
szczęśliwego kodowania !!
źródło
Nie trzeba dodawać uprawnień, jak w przypadku dotychczas dostarczonych rozwiązań. Pobierz tę stronę jako ciąg:
http://www.ip-api.com/json
lub
http://www.telize.com/geoip
Pobieranie strony internetowej jako ciągu można wykonać za pomocą kodu Java:
http://www.itcuties.com/java/read-url-to-string/
Analizuj obiekt JSON w następujący sposób:
https://stackoverflow.com/a/18998203/1987258
Atrybut json „zapytanie” lub „ip” zawiera adres IP.
źródło
źródło
Metoda getDeviceIpAddress zwraca adres IP urządzenia i preferuje adres interfejsu Wi-Fi, jeśli jest podłączony.
źródło
Jest to przeróbka tej odpowiedzi, która usuwa nieistotne informacje, dodaje pomocne komentarze, jaśniej nazywa zmienne i poprawia logikę.
Nie zapomnij podać następujących uprawnień:
InternetHelper.java:
źródło
minimalistyczna wersja kotlin
źródło
źródło
Wystarczy użyć Volley, aby uzyskać adres IP z tej strony
źródło
Ostatnio adres IP jest nadal zwracany przez
getLocalIpAddress()
pomimo odłączenia od sieci (brak wskaźnika usługi). Oznacza to, że adres IP wyświetlany w Ustawieniach> Informacje o telefonie> Status różni się od tego, co myślała aplikacja.Zaimplementowałem obejście, dodając ten kod przed:
Czy to komukolwiek dzwoni?
źródło
w Kotlinie, bez Formatera
źródło
W Twojej aktywności następująca funkcja
getIpAddress(context)
zwraca adres IP telefonu:źródło
Oto wersja @Nilesh i @anargund firmy Kotlin
źródło
Urządzenie może mieć kilka adresów IP, a używany w konkretnej aplikacji może nie być adresem IP, który zobaczą serwery odbierające żądanie. Rzeczywiście, niektórzy użytkownicy używają VPN lub proxy, takich jak Cloudflare Warp .
Jeśli Twoim celem jest uzyskanie adresu IP pokazanego przez serwery odbierające żądania z Twojego urządzenia, najlepiej jest wysłać zapytanie do usługi geolokalizacji IP, takiej jak Ipregistry (zastrzeżenie: pracuję dla firmy), za pomocą jej klienta Java:
https://github.com/ipregistry/ipregistry-java
Oprócz tego, że jest naprawdę prosty w użyciu, otrzymujesz dodatkowe informacje, takie jak kraj, język, walutę, strefę czasową adresu IP urządzenia i możesz określić, czy użytkownik korzysta z serwera proxy.
źródło
Jest to najłatwiejszy i najprostszy sposób, jaki kiedykolwiek istnieje w Internecie ... Po pierwsze, dodaj to uprawnienie do pliku manifestu ...
"INTERNET"
„ACCESS_NETWORK_STATE”
dodaj to do pliku onCreate działania ...
Teraz dodaj tę funkcję do swojej klasy MainActivity.class.
źródło
Jeśli masz powłokę; ifconfig eth0 działał również na urządzeniu x86
źródło
Sprawdź ten kod ... Za pomocą tego kodu. dostaniemy ip z mobilnego internetu ...
źródło
Nie używam Androida, ale poradzę sobie z tym w zupełnie inny sposób.
Wyślij zapytanie do Google, na przykład: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=my%20ip
I odnieś się do pola HTML, w którym zamieszczona jest odpowiedź. Możesz również wysłać zapytanie bezpośrednio do źródła.
Google najbardziej lubi przebywać tam dłużej niż Twoja aplikacja.
Pamiętaj tylko, że być może Twój użytkownik nie ma w tym momencie Internetu, co chciałbyś mieć!
Powodzenia
źródło
Możesz to zrobić
źródło
źródło
Szczerze mówiąc, jestem trochę zaznajomiony z bezpieczeństwem kodu, więc może to być hackowanie. Ale dla mnie jest to najbardziej wszechstronny sposób:
źródło
Kompilowanie niektórych pomysłów na uzyskanie ip wifi z
WifiManager
ładniejszego rozwiązania kotlin:Alternatywnie można uzyskać adresy IP urządzeń zwrotnych ip4 za pośrednictwem
NetworkInterface
:źródło
Na podstawie tego, co przetestowałem, jest to moja propozycja
źródło