Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Jak w Javascript poznać publiczny (oraz prywatny!) adres IP?

27 stycznia 2015, 12:14 | W biegu | komentarzy 11

Zobaczcie tylko na jeszcze świeży kawałek Javascriptu tutaj. Przykładowo – w Chrome wystarczy użyć F12 -> Console i wkleić kod do przeglądarki. Można też z niewielką modyfikacją (ostatnia linijka) uruchomić taki javascript ze swojego serwera.

Dla tych, którym się spieszy umieściłem ww. kod (zwracający adresy IP) – pod adresem: http://sekurak.pl/stun.html (można zobaczyć jego źródło – to czysty HTML). U mnie działa (Chrome). Uwaga: nie we wszystkich przeglądarkach będzie to działać – bo nie wszystkie implementują WebRTC…

Co wykorzystuje ten mechanizm? Na razie jeszcze mało popularny mechanizm WebRTC (Web Real-Time Communication), wykorzystywany do bezpośredniej komunikacji pomiędzy przeglądarkami (np. na potrzeby rozmowy video). Ten z kolei wykorzystuje m.in. protokół STUN (bardziej ludzki opis tutaj), który umożliwia „dogadanie się” dwóm komputerom (przeglądarkom) które są za NAT-em:

STUN is a standardized set of methods and a network protocol to allow an end host to discover its public IP address if it is located behind a NAT.

Co ciekawe, do prawidłowego działania STUN wymagany jest zewnętrzny serwer (bo skąd niby lokalna przeglądarka ma znać nasz publiczny adres IP?). Ale przynajmniej Chrome i Firefox też z tym sobie dają radę.

Kolejną interesującą rzeczą jest fakt, że STUN domyślnie wykorzystuje UDP – więc całość nieźle będzie omijać choćby proxy ustawione w przeglądarce (uwaga użytkownicy TOR-a…). Z kolei sam twórca powyższego kodu dodaje :

(…), these STUN requests are made outside of the normal XMLHttpRequest procedure, so they are not visible in the developer console or able to be blocked by plugins such as AdBlockPlus or Ghostery. This makes these types of requests available for online tracking if an advertiser sets up a STUN server with a wildcard domain.

 –ms

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Kiedyś (z 2 lata temu) pisałem sip phona w przeglądarce opartego o WebRTC i czy nie jest czasem tak, że jak napisałeś ” Chrome i Firefox też z tym sobie dają radę” – to czy nie korzystają one po prostu ze swojego publicznego serwera STUN jeśli nie podasz innego w kodzie?

    Odpowiedz
    • //firefox already has a default stun server in about:config
      // media.peerconnection.default_iceservers =
      // [{„url”: „stun:stun.services.mozilla.com”}]
      var servers = undefined;

      Odpowiedz
  2. Jab~

    Zerknij w źródła – są ładnie opisane, ale tak Firefox ma swój.

    //firefox already has a default stun server in about:config
    // media.peerconnection.default_iceservers =
    // [{„url”: „stun:stun.services.mozilla.com”}]
    var servers = undefined;

    //add same stun server for chrome
    if(window.webkitRTCPeerConnection)
    servers = {iceServers: [{urls: „stun:stun.services.mozilla.com”}]};

    Odpowiedz
  3. Fab

    Dokładnie o to samo chciałem dopytać. Jak dokładnie Chrome i FF sobie z tym radzą?

    Odpowiedz
  4. ja

    Firefox:
    about:config

    media.navigator.enabled: false
    media.peerconnection.enabled: false

    Załatwione :>

    Odpowiedz
    • Stożek

      Jakaś magiczna flaga, która wyłączyłaby to w Chrom{e,ium}?

      Odpowiedz
  5. Michał

    Potwierdzam, że w Chrome działa i na dodatek, co mnie trochę dziwi, podaje adres IP mojej końcówki w OpenVPN. A przez niego nie łącze się do Internetu, a jedynie do podsieci firmowej.

    Odpowiedz
    • No potrafi też zlistować inne interfejsy jak masz na nich IP (nawet jeśli nie korzystasz z VPN)

      Odpowiedz
  6. grg

    TorBrowser 4.0.3 nie „podatny” :)
    Z domyślnymi ustawieniami ofc.

    Odpowiedz
    • hoho

      ale javascripta włączyłeś?

      Odpowiedz

Odpowiedz