W ~połowie : jak ustawić dbmon + wireshark na linuxie.
Port
USB jest w każdym kompie i o ile przejście przez Windows Drivers hell
skutecznie odstrasza mnie od prób na Windowsie, tak próby używania USB
na linuxie są mniej bolesne. Protokół jest dużo trudniejszy od RS232 -
jednak możliwości też są proporcjonalnie większe, łącznie z tym że jeśli
ma się USB na procku, to może ono i symulować RS'a.
Do
pierwszej zabawy z USB polecam attiny13 + libusb-1.0 + qtcreatora +
poczytanie: http://www.beyondlogic.org/usbnutshell/usb1.shtml .
Avrusb
pod attiny13 dorobił się genialnego tutoriala na codeandlife.com i
odpalenie go krok po kroku nie nastręcza żadnych trudności. libusb-1.0
ma przejżystą dokumentację w doxygenie i czytelne przykłady w
internecie. QtCreator daje nam bardzo przyjemną możliwość debugowania i
dość bezproblemowe dodawanie bibliotek do projektu. Wreszcie
beyondlogic.org funduje wszystkie niezbędne informacje by móc zacząć.
Do
następnych zabaw używam STM32F103 - ot mam taką płytkę. Uruchomienie
nie jest już tak bezproblemowe i dobrze opisane w necie, niestety nie
znalazłem też dobrze przygotowanych przykładów pod wygodne darmowe
środowisko - przykłady st przyjemnie buduje się jedynie w płatnych
środowiskach takich jak Keil ( który btw ma bardzo ubogo zrobione IDE,
chociaż nadal więcej opcji debugu ). Przynajmniej taka jest moja opinia
:)
Po uporaniu się z kompilacją przykładu dla STM'ki
należy podłączyć ją pod USB i ... sprawdzić czy komputer wykrywa
urządzenie, jeśli tak - wtedy dopiero możemy stwierdzić że kompilacja
przeszła poprawnie. Chociaż nadal nie możemy być w 100% pewni czy aby
napewno wszystkie ustawienia są dobre. By to sprawdzić komenda:
lsusb -v
pokaże
nam wszyskie urządzenia podłączone po usb razem z ich opisem, id etc.
etc. ( tu odsyłam do linku z beyondlogic ). Te informacje są
wystarczające by zrobić apkę używającą libusb-1.0 piszącą / czytającą z
naszego użądzenia.
Będziemy musieli:
1) Połączyć się z urządzeniem
2) odebierać / wysyłać
3) Zamknąć urządzenie
Mając problemy z pakietami podczas transmisji przydatnym narzędziem może okazać się usbmon + wireshark.
usbmon
jak nazwa wskazuje monitoruje nam urządzenia usb. Dzięki niemu możemy
podglądać co jest wysyłane do urządzenia i co wysyła nam urządzenie
spowrotem. Ponieważ USB jest trudniejsze niż UART i ciężej tu strzelać
na hybił narzędzie to może dostarczyć nam wiele wskazówek - a jeśli nie,
używanie jego ma bardzo dobrą rolę edukatorską :)
Wireshark
pokaże nam pakiety usb w ładnej formie, pozwoli na wygodne filtrowanie
treści i przedstawi informacje w wersji słownomuzycznej a nie raw data.
Niestety
konfiguracja środowiska pod debug zmieniła się dość znacznie.
Pocieszajace że na znacznie prostrzą, mniej pocieszające że dość ciężko
jest się do niej dokopać.
Konfiguracja na szybko - komendy do terminala:
1) sudo apt-get install wireshark
2) sudo dpkg-reconfigure wireshark-common
3) sudo usermod -a -G wireshark $USER
4) addgroup usbmon
5) gpasswd -a $USER usbmon
6) echo 'SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640"' > /etc/udev/rules.d/99-usbmon.rules
7) sudo reboot
--- restart kompa --- dla zaawansowanych: zrób reload udev + logout i login na urzytkownika ( reload udev był już tu poruszany )
by używać za każdym razem przed uruchomieniem wiresharka dla celów usb:
8) sudo modprobe usbmon
9) wireshark (albo odpal z ikonki - wszystko jedno)
Tłumaczenie:
ad.1 ) instalujemy wiresharka
ad.2 ) instalujemy dostępy dla normalnych śmiertelników dla wiresharka - innaczej musimy odpalac go z sudo
ad.3 ) dodajemy naszego usera do grupy wireshark, która może używać wiresharka bez uprawnień administratora (patrz ad.2)
ad.4 ) dodajemy nową grupę usbmon - która może używać usbmon bez uprawnień administratora
ad.5 ) dodajemy naszego usera do grupy usbmon
ad.6 ) dodajemy nowy udev dla naszej grupy - uwaga, możemy dodać go dla grupy wireshark i olać pkt 4 i 5
ad.7 ) robimy ponowne wczytanie ustawień w wersji na pałkę.
ad.8 ) montujemy usbmon
ad.9 ) włączamy wiresharka - tu już możemy wybrać nasze urządzenie usb.
By wybrać odpowiednie urządzenie USB musimy mieć jego bus nr i nr urządzenia. Dostarczy nam tego nieoceniona komenda lsusb.
Bus
{ 1-9 } odpowiada usbmon { 1-9 } , gdy włączymy śledzenie odpowiedniego
Bus'a trzeba szukać informacji od odpowiedniego urządzenia.
Najwygodniej dodawająć filtry w Wiresharku. Krótkie intro do okienek
wiresharka innym razem.
Historia poszukiwań - sekcja 'dla dociekliwych' :
Szukając informacji o debugowaniu usb:
Pod: http://superuser.com/questions/743350/how-to-use-usbmon-for-knowing-amount-of-data-transferred-from-usb-pendrive
Pierwsze dwie odpowiedzi tłumaczą jak używać usbmon i lsusb w bardziej wylewny niż tu sposób. 3 Odpowiedź jest moja :)
Pod: https://wiki.wireshark.org/CaptureSetup/USB
Jest opis wiki "jak to się je", przy czym jest dla starych kerneli. O tym jak to się robi "współcześnie" nie ma już nic.
Pod: http://askubuntu.com/questions/326597/enabling-usbfs-in-ubuntu jest ciekawa dyskusja, która nam niestety nie pomoże.
Pod:
http://ubuntuforums.org/showthread.php?t=1432598 - ta też nam nie
pomoże, ale dowiemy się od którego kernela wzwyż nie mamy usbfs .
Pod: http://stackoverflow.com/questions/4971719/usb-sniffing-with-wireshark
swojski autor przemo_li daje quick&dirty wireshark i usbmon setup - perełka ;)
Pod:
https://ask.wireshark.org/questions/7523/ubuntu-machine-no-interfaces-listed
jest ładnie przedstawiony sposób nice way / unnice way dodawania grupy
dla wiresharka.
ps:
http://security.stackexchange.com/questions/37927/can-a-connected-usb-device-read-all-data-from-the-usb-bus
ps2:
narzędzia:
- usbmon
- good board with usb device on it
- libusb
Dają świetne możliwości do podglądania urządzeń komunikujących się po usb i ... hackowania ich. Enjoy!
Brak komentarzy:
Prześlij komentarz