Szukaj na blogu

Posłuchaj swojego komputera, czyli jak podsłuchać spotify.

Bawiłem się ostatnio snifferem, konkretnie Justnifferem jest do niego dołączony taki genialny skrypt justniffer-grab-http-traffic który zapisuje kopię wszystkich plików jakie pobiera przeglądarka po http. Jest to niesamowicie wygodne gdy słucha się jakiejś muzyki na stronie - zostaje potem kopia każdej mp3ki jakiej słuchało, którą mogę potem zabrać na przenośny odtwarzacz i wyjechać na kilkudniowe wakacje z dala od internetu.

Jak go zobaczyłem to aż się prosiło zrobić sobie backup spotify na dysku, tyle, że tu nagle niespodzianka, odtwarzacz spotify nie ściąga muzyki po http tylko po rtmp, w związku z czym skrypt staje się bezużyteczny na stronie spotify.
Niby można rtmp przechwycić sposobem który opisałem tutaj ale w przypadku mp3jek było by to strasznie niewygodne aby z każdym 3 minutowym utworem tak kombinować. Zdecydowanie wolę aby sobie po prostu grało a mi została kopia (właściciele strony też pewnie byli by bardziej zadowoleni bo w ten sposób słuchał bym ich reklam).

Próbowałem znaleźć inny skrypt który wyciągnął by mi mp3ki ze strumienia rtmp, jest kilka takich które próbują parsować strumienie rtmp, jednak nie udało mi się znaleźć takiego który by tu zadziałał.
Nie należę do osób które łatwo się poddają, więc napisałem własny skrypt. Jak z tego korzystać?

najlepiej uruchomić poleceniem:
sudo justniffer -i eth0 -p "tcp port 1935" -l "%response" | ./spotify_rtmp_mp3_filter.py
a potem iść na play.spotify.com i zacząć czegoś słuchać (kolejność ma znaczenie, najpierw trzeba włączyć sniffer).
Skrypt będzie tworzył nam pliki o nazwach 001.mp3, 002.mp3 ... i tak dalej w katalogu w którym został uruchomiony (jeden utwór w jednym pliku, reklamy też zapisuje w osobnych plikach), trzeba uważać aby sobie nie nadpisać tego co było nagrywane poprzednim razem.

Można użyć też innego sniffera byle by tylko potrafił łączyć przechwycone pakiety w całość we właściwej kolejności. Każdy ma pewnie jakiś swój ulubiony sniffer :) np w wiresharku trzeba wybrać aby nasłuchiwał na porcie 1935 a gdy już zakończy się słuchanie, kliknąć któryś pakiet prawym przyciskiem i z menu kontekstowego wybrać folow tcp stream, pojawi się okienko w którym trzeba wybrać aby pokazywał jedynie odpowiedź serwera a następnie dać zapisz do pliku. Taki plik można potraktować moim skryptem aby wyciągnął z niego mp3ki:
./spotify_rtmp_mp3_filter.py plik_ze_sniffera

Uwaga to jest wstępna wersja, zdatna do użytku ale nie działa do końca tak jak bym chciał, czasem mp3ki zawierają jeszcze jakieś śmieci których nie udało się zidentyfikować - o ile mi się uda to jeszcze to poprawię.

26 komentarzy:

  1. Świetna robota! Jednak zawiodła mnie jakość na Spotify. Tylko MP3: 160 kbps, 44 kHz.

    OdpowiedzUsuń
    Odpowiedzi
    1. https://www.spotify.com/us/help/faq/tech/codec-quality/

      Usuń
    2. No nie zupełnie jest to prawdą co tam piszą, bo wyraźnie widać, że korzystają z mp3 a nie vorbis.
      Widać nawet, że do kodowania tych mp3jek wykorzystują lame w wersji 3.98

      Albo to FAQ jest nieaktualne albo dotyczy jakiegoś innego odtwarzacza (bo spotify mona słuchać nie tylko przez przeglądarkę ale i są różne dedykowane programy).

      Usuń
    3. Chyba z założenia Spotify słucha się przez dedykowanego klienta, a opcja przez przeglądarkę jest tylko opcją dodatkową. Przez jakiś czas zresztą w ogóle nie była dostępna, teraz widzę że ją udostępnili znowu - no i chyba znajdzie się wreszcie argument za tym, żeby jednak sobie zaktualizowac Firefoksa ;), bo moja wersja 3.6, której uparcie się trzymam z uwagi na przyzwyczajenie do układu całego interfejsu użytkownika, nie jest tam obsługiwana...

      Usuń
  2. A co z poruszaną kwestią HBO GO?

    OdpowiedzUsuń
    Odpowiedzi
    1. Bez zmian ale ekipa sd-xbmc nadal nad tym pracuje.

      Usuń
    2. Ekipa SD-XBMC słabo się stara. Pobrałem ostatnio ich wtyczkę i dużo rzeczy nie śmiga...

      Usuń
  3. Może nie do końca na temat, ale czy mógłbyś poradzić jak nagrać stream live z openera z serwisu livestream.com? DO tej pory korzystałem z replay media catchera 4, ale coś zrywa po paru sekundach :( Bardzo proszę o poradę adamfo@poczta.fm

    OdpowiedzUsuń
    Odpowiedzi
    1. Tutaj wszystko ładnie opisane: http://miniskrypt.blogspot.com/2013/01/uniwersalny-sposob-na-filmboxlive-i.html

      Usuń
  4. Zrobisz skryptozakładki (na różne jakości) na pobieranie filmów z YouTube? Bardzo proszę.

    OdpowiedzUsuń
  5. Czy można otrzymać darmowe premium na Spotify bez podawania numerów karty kredytowej?

    OdpowiedzUsuń
  6. Z ciekawości patrzę i powiem tak: mi nie działa. Tworzy się plik 000.mp3, potem już żaden inny się nie tworzy, po otwarciu pliku wyświetla się error "stream contains no data". Wcześniej na maszynie wirtualnej na innym komputerze przy pierwszej próbie nagrywania coś się nagrało, ale potem to samo. Więc chyba zadowolę się zwykłym pakietem premium który mam.

    OdpowiedzUsuń
    Odpowiedzi
    1. Czy na pewno włączyłeś sniffer przed wejściem na stron spotify?
      Bo jeśli włączy się go później to może mieć problemy z rozpoznaniem gdzie jest początek mp3ki.

      A jeśli to nie o to chodzi to zapisz cały przechwycony ruch w pliku jeszcze przed przefiltrowaniem przez mój skrypt będzie można zobaczyć co tam takiego siedzi, że sobie nie poradził.

      Usuń
  7. Witam Drogi Panie Marku. Nie wiem za bardzo jak wykonać to co jest napisane w instrukcji... Może Pan zrobić jakieś screen'y lub film lub dać jakiś link do pobrania itp... Tak samo jeśli o nagrywanie streamów LIVE. Bo nie ogarniam tych dwóch rzeczy.

    OdpowiedzUsuń
    Odpowiedzi
    1. Nagrałem film http://youtu.be/O95xyX4ckNM mam nadzieję, że taka prezentacja pomoże.

      Usuń
  8. witam a może jakiś sposób na pobieranie z polskiego radia

    OdpowiedzUsuń
    Odpowiedzi
    1. Dowolnym programem do pobierania strumieni albo do słuchania który potrafi zapisywać strumień na dysku.
      Na przykład mplayer z parametrem -dumpstream

      adresy
      mms://stream.polskieradio.pl/program1
      mms://stream.polskieradio.pl/program2
      mms://stream.polskieradio.pl/program3
      mms://stream.polskieradio.pl/program4

      Usuń
  9. Cześć!
    WireShark'a to jeszcze dałem radę obsłużyć, ale jak wykorzystać Twój skrypt żeby z przechwyconych pakietów zbudował .mp3 to już nie daję rady.
    Co z tym skryptem zrobić, w jakim środowisku, lub przy pomocy czego uruchomić?
    Dzięki z góry za wskazówki!

    OdpowiedzUsuń
    Odpowiedzi
    1. Skrypt jest napisany w pythonie 2.*, najlepiej uruchamiać za pomocą pythona 2.7

      Przewiń do 1:30
      http://youtu.be/O95xyX4ckNM
      pokazuję tam jak wyciągnąć pliki mp3 ze strumienia przechwyconego przez wireshark.

      Usuń
    2. Zainstalowałem Python 2.7 Utworzyłem katalog na partycji C i umieściłem w nim Twój skrypt, oraz plik wynikowy z WireShark'a. Klikam dwukrotnie w skrypt i otrzymuję plik .mp3 o rozmiarze 0KB.
      Wszystko to próbuję wykonać na WIN7

      Usuń
  10. U mnie skrypt działa. Zrobiłem kilka plików i w większości z nich słychać "przeskoki" muzyki. Czasem 1 raz w utworze, czasem więcej. Czym może to być spowodowane? Używałem pythona 2.7 na Ubuntu.

    OdpowiedzUsuń
    Odpowiedzi
    1. U mnie czasem też się to zdarza.
      Dane w strumieniu zawierają coś dziwnego, przypuszczam że to może być wynik retransmisji jakiegoś pakietu, ale było to na tyle rzadkie, że nie udało mi się ustalić dokładnej przyczyny. Prościej było pobrać utwór z przeskokiem raz jeszcze.

      Usuń
  11. To jest dobre. Ale jest też prostszy sposób na ściąganie muzyki ze Spotify. Możesz skorzystać sobie z takiego programu, który automatycznie nagrywa słuchane przez nas utwory - goo.gl/TGuFI7

    A potem po prostu wrzuca MP3 Spotify na dysk komputera w trybie offline. Bez reklam i bez kłopotów.

    OdpowiedzUsuń
    Odpowiedzi
    1. Ale w ten sposób pogorszy się jakość muzyki bo będzie dwukrotnie stratnie skompresowany. Raz przez spotify a potem drugi raz przez program do nagrywania.

      Usuń
  12. czy polecenie sudo justniffer -i eth0 -p "tcp port 1935" -l "%response" | ./spotify_rtmp_mp3_filter.py

    wpisuje w wierszu polecen?

    OdpowiedzUsuń
    Odpowiedzi
    1. Można ale lepiej w konsoli albo terminalu bo wtedy widać co się dzieje i można przerwać za pomocą ctrl+c

      Usuń