Wiem, że początkowa reakcja na to pytanie brzmi „nie” i „nie da się tego zrobić” i „nie powinieneś tego potrzebować, robisz coś źle”. Próbuję uzyskać adres IP LAN użytkownika i wyświetlić go na stronie internetowej. Czemu? Bo o to właśnie chodzi na stronie, nad którą pracuję, pokazując jak najwięcej informacji o tobie, gościu: http://www.whatsmyip.org/more-info-about-you/
Więc tak naprawdę nie robię nic z adresem IP poza pokazaniem go użytkownikowi w celach informacyjnych. Robiłem to za pomocą małego apletu Java. Działało całkiem nieźle. Ale w dzisiejszych czasach przeglądarka sprawia, że tak wiele razy zgadzasz się i ufasz, aby uruchomić nawet najmniejszy aplet java, że wolałbym go w ogóle nie uruchamiać.
Więc na jakiś czas pozbyłem się tej funkcji, ale chciałbym, aby to z powrotem, jeśli to możliwe. To było coś, z czego ja, jako konsultant komputerowy, korzystałem od czasu do czasu. Szybciej jest przejść do tej witryny, aby zobaczyć, w jakim zakresie adresów IP działa sieć, niż przejść do Preferencji systemowych, Sieci, a następnie do dowolnego interfejsu.
Zastanawiam się więc, mam nadzieję, czy można to zrobić w samym javascript? Może jakiś nowy obiekt, do którego możesz uzyskać dostęp, podobnie jak javascript może zapytać przeglądarkę, gdzie znajduje się położenie geograficzne na Ziemi. Może jest coś podobnego do informacji o sieci klienta? Jeśli nie, może jest na to zupełnie inny sposób? Jedyne sposoby, które przychodzą mi do głowy, to aplet Java lub obiekt flash. Wolałbym nie robić żadnego z tych.
źródło
HTTP_X_FORWARDED_FOR
na tej stronie, po prostu mówię.Odpowiedzi:
Jak się okazuje, ostatnie rozszerzenie WebRTC w HTML5 pozwala javascript na wysyłanie zapytań do lokalnego adresu IP klienta. Dowód koncepcji jest dostępny tutaj: http://net.ipcalf.com
Ta funkcja jest najwyraźniej zgodna z projektem i nie jest błędem. Jednak biorąc pod uwagę jego kontrowersyjny charakter, byłbym ostrożny, jeśli chodzi o poleganie na tym zachowaniu. Niemniej jednak uważam, że doskonale i odpowiednio adresuje twój zamierzony cel (ujawnia użytkownikowi, co przecieka jego przeglądarka).
źródło
Aktualizacja
To rozwiązanie nie działałoby już, ponieważ przeglądarki naprawiają wyciek webrtc: aby uzyskać więcej informacji na ten temat, przeczytaj to drugie pytanie: RTCIceCandidate nie zwraca już adresu IP
Oprócz odpowiedzi udzielonej przez firmę, ten kod działa w przeglądarkach obsługujących WebRTC (Chrome i Firefox). Słyszałem, że ma miejsce ruch mający na celu zaimplementowanie funkcji, która sprawia, że witryny żądają adresu IP (jak w przypadku lokalizacji geograficznej użytkownika lub mediów użytkownika), chociaż nie została jeszcze zaimplementowana w żadnej z tych przeglądarek.
Oto zmodyfikowana wersja kodu źródłowego , zmniejszona liczba wierszy, nie wysyłająca żadnych żądań ogłuszenia, ponieważ chcesz tylko lokalnego adresu IP, a nie publicznego adresu IP:
Tworzymy fikcyjne połączenie równorzędne, aby zdalny peer mógł się z nami skontaktować. Zwykle wymieniamy się kandydatami na lód i czytając kandydatów na lód, możemy podać adres IP użytkownika.
Możesz znaleźć demo na -> Demo
źródło
WebRTC API może być używany do pobierania klienta lokalnego IP.
Jednak przeglądarka może go nie obsługiwać lub klient mógł ją wyłączyć ze względów bezpieczeństwa. W każdym razie nie należy polegać na tym „hacku” w dłuższej perspektywie, ponieważ prawdopodobnie zostanie on załatany w przyszłości (patrz odpowiedź Cullen Fluffy Jennings).
Poniższy kod ECMAScript 6 pokazuje, jak to zrobić.
Zauważ, że piszę
return resolve(..)
lubreturn reject(..)
jako skrót. Obie te funkcje nic nie zwracają.Wtedy możesz mieć coś takiego:
źródło
Wyczyściłem post mido, a następnie wyczyściłem znalezioną funkcję. Spowoduje to powrót
false
lubarray
. Podczas testowania pamiętaj , że musisz zwinąć tablicę w konsoli programisty, w przeciwnym razie jej nieintuicyjne domyślne zachowanie może skłonić Cię do myślenia, że zwraca wartość pustąarray
.Dodatkowo, pamiętajcie, że nie jest to coś starego i nowego, jak CSS,
border-radius
chociaż jeden z tych bitów nie jest obsługiwany przez IE11 i starsze. Zawsze używaj wykrywania obiektów, testuj w rozsądnie starszych przeglądarkach (np. Firefox 4, IE9, Opera 12.1) i upewnij się, że nowsze skrypty nie psują nowszych fragmentów kodu. Dodatkowo zawsze wykryć standardów kodu zgodnego pierwszy więc jeśli jest coś z CSS powiedzieć prefiks wykryć standardowy kod nie uprzednio zamontowany pierwszy , a potem cofać jak w dłuższej perspektywie wsparcia zostaną ostatecznie ujednolicone dla reszty jest to istnienia.źródło
ip
- linia 3 i linia 8.<input name="example1" type="hidden" value="whatever" />
takiej sytuacji możesz użyć lub użyć AJAX POST. Gorąco polecam przestudiowanie mojejajax()
funkcji tutaj: jabcreations.com/docs/javascriptźródło
Chrome 76+
W zeszłym roku użyłem odpowiedzi Linblow (2018-październik-19), aby pomyślnie odkryć mój lokalny adres IP za pomocą javascript. Jednak ostatnie aktualizacje Chrome (76?) Sprawiły, że ta metoda nie została rozwiązana i zwraca teraz zaciemniony adres IP, taki jak:
1f4712db-ea17-4bcf-a596-105139dfd8bf.local
Jeśli masz pełną kontrolę nad swoją przeglądarką, możesz cofnąć to zachowanie, wyłączając je we flagach Chrome, wpisując to w pasku adresu:
i WYŁĄCZENIE flagi
Anonymize local IPs exposed by WebRTC
W moim przypadku potrzebuję adresu IP dla skryptu TamperMonkey, aby określić moją obecną lokalizację i robić różne rzeczy w zależności od mojej lokalizacji. Mam również pełną kontrolę nad własnymi ustawieniami przeglądarki (brak Zasad korporacyjnych itp.). Więc dla mnie zmiana
chrome://flags
ustawienia załatwia sprawę.Źródła:
https://groups.google.com/forum/#!topic/discuss-webrtc/6stQXi72BEU
https://codelabs.developers.google.com/codelabs/webrtc-web/index.html
źródło
Więcej informacji na temat ograniczeń, jakie przeglądarki prawdopodobnie dodadzą, aby to złagodzić i co robi w tej sprawie IETF, a także dlaczego jest to potrzebne w IETF SPEC w zakresie obsługi IP
źródło
RTCPeerConnection
Mogą być użyte. W przeglądarkach takich jak Chrome, w którychgetUserMedia
wymagane jest pozwolenie , możemy po prostu wykryć dostępne urządzenia wejściowe i poprosić o nie.źródło