OpenWrt - wysyłanie plików przez Bluetooth
spamowanie nieświadomych klientów - BT jako nośnik materiałów reklamowych
Ostatnia zmiana: 2014-05-20 20:26



Wracałem sobie do domu komunikacją miejską. Kto podróżuje nią (w Warszawie) wie, że w metrze i nowych autobusach zamontowane są ekrany LCD prezentujące treści reklamowe i różne informacje lokalne - wiadomości bieżące, pogoda, kursy walut i podobne rzeczy. Zamiast patrzeć na zmęczone pracą twarze współpasażerów większość ludzi czyta mniej lub bardziej bezmyślnie przewijający się bełkot reklamowy. Jedną z wiadomości było "Słówko dnia" czyli możliwość poznania nowego słówka (angielskiego w tym przypadku). Jednakże czytając treść zauważyłem komunikat "Włącz bluetooth a dostaniesz słówko dnia na telefon". Czemu nie, włączyłem bluetooth, umożliwiłem wykrywanie interfejsu i po kilku chwilach bez żadnego pytania telefon odebrał automatycznie plik mp3 ze wspomnianym słówkiem. Pierwsze co mi przyszło do głowy to "o kurcze, ja też tak chcę". Więc już wiadomo czym się zająłem po powrocie do domu.

Sam proces uruchomienia bluetooth jest już opisany: http://eko.one.pl/?p=openwrt-bluetooth . Postępujemy wg wskazówek w poradniku i doprowadzamy do uruchomienia interfejsu bluetooth. Do wysyłania plików przydał by się jeszcze jakiś program; w środowisku linuksowym stosowany jest do tego obexftp. Takiego pakietu nie znajdziemy standardowo w OpenWrt, więc stworzyłem odpowiednią paczkę dla Backfire/ar71xx:

    # opkg update
    # opkg install obexftp

(pakiety dostępne są u mnie w repozytorium dla ar71xx). Najważniejsze: aby wysłać plik posłużymy się usługą OBEX Object Push. Niekoniecznie wszystkie telefony to obsłużą, więc najpierw należy po prostu zeskanować otoczenie i sprawdzić które urządzenie i na jakim kanale to obsługuje. W tym celu można wykorzystać sdptool:

    # sdptool search OPUSH
    Inquiring ...
    Searching for OPUSH on 00:1E:10:xx:xx:xx ...
    Service Name: Object Push
    Service RecHandle: 0x10006
    Service Class ID List:
        "OBEX Object Push" (0x1105)
    Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
                Channel: 18
        "OBEX" (0x0008)
    Language Base Attr List:
        code_ISO639: 0x656e
        encoding:    0x6a
        base_offset: 0x100
    Profile Descriptor List:
        "OBEX Object Push" (0x1105)

    Searching for OPUSH on 44:F4:59:xx:xx:xx ...
    Service Name: Object Push
    Service RecHandle: 0x10003
    Service Class ID List:
        "OBEX Object Push" (0x1105)
    Protocol Descriptor List:
        "L2CAP" (0x0100)
        "RFCOMM" (0x0003)
                Channel: 3
        "OBEX" (0x0008)
    Profile Descriptor List:
        "OBEX Object Push" (0x1105)
                Version: 0x0100

Dwa różne telefony - pierwszy to jakiś Plusfon, obsługuje OOP na kanale 18, drugi zaś był to Samsung Spica, obsługującym OOP na kanale 3. Wysłanie pliku do telefonu jest już proste - trzeba podać do kogo wysyłamy (BT MAC adres), na którym kanale i co:

    # obexftp -b 44:F4:59:xx:xx:xx -B 3 -U none -p /mnt/sda1/media/zdjecie.jpg
    Suppressing FBS.
    Connecting...done
    Tried to connect for 89ms
    Sending "/mnt/sda1/media/zdjecie.jpg"... done


I to wszystko. Drobna automatyzacja (skrypt, cron) pozwala ując to w bezobsługowy automat. Oczywiście trzeba powiedzieć to wprost - nie będzie działać to ze wszystkimi urządzeniami. BlackBerry nie zezwala na przyjmowanie plików bez parowania urządzeń. Android po prostu przyjmuje, inne urządzenia mogą np. zapytać o pin.

No dobrze, a jakie są praktyczne zastosowania takiego mechanizmu? Budząc się rano mam w telefonie aktualny plik wideo z prognozą pogody z tvnmeteo. Można przesłać plik graficzny np. w wykresem walut, plik mp3 z kolejną lekcją języka obcego, słówkami do nauki lub po prostu kolejnym rozdziałem audiobooka. Zastosowań może być wiele.

Niedawno pochwaliłem się takim rozwiązaniem koledze który prowadzi sklep (stacjonarny). Pomysł spodobał mu się na tyle, że zostałem poproszony o wykonanie takiej instalacji która automatycznie przesyła do klientów jakieś treści reklamowe. O ile niektórzy klienci mogą to odbierać jako zwykły spam, o tyle można w ten sposób np. otrzymać kupon zniżkowy na wybrane towary czy aktualne promocje w sklepie.

Przy okazji: jeden z użytkowników forum pytał czy można zrobić serwer plików przez bluetooth. Można - całe polecenie to:

    # obexftpd -b -c /mnt/sda1 &

Działa bez problemu np. z Androidowym ES File Explorer. Przy połączeniu zapewne zostaniemy zapytani o PIN, znajduje się się on w /etc/bluetooth/hci.conf i domyślne jest to "BlueZ" czyli 25839.