#linux #perl #usb
#linux #perl #usb
Вопрос:
Я запустил этот код Perl, работающий в Linux:
my $command = "x{11}x{22}x{33}x{44}x{55}x{66}x{77}x{88}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}"; # total of 20 bytes to transmit
my $bytesWritten = $device->bulk_write(0x01, $command, 1000);
Используя Wireshark, я обнаружил, что фактические передаваемые данные приложения являются
0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 11 22 33 44
Печать $bytesWritten
показывает, что было передано 20 байт, но это отличается от того, что было зафиксировано Wireshark.
В чем может быть проблема?
Комментарии:
1. Может ли кто-нибудь показать мне правильный способ формирования URB bulk_transfer? Должна ли переменная byte содержать только команду / данные, которые я хотел бы отправить, или есть что-то еще, что мне нужно туда вставить?
2. @daxim, спасибо, что показал мне, как сделать мой пост более читаемым 🙂
3. Соответствует ли информация в wiki. wireshark.org/CaptureSetup/USB проливает какой-либо свет? т. Е. используете ли вы kernel >= 2.6.21 и libpcap >= 1.1.0?
4. Что показывает структура perl? Сколько из них было запрошено для отправки с помощью системного вызова и сколько, по словам системного вызова, было отправлено?
5. какую версию libusb вы используете?
Ответ №1:
Возможно, что программа Perl работает должным образом.
Я видел, как wireshark обрезает USB-пакеты (еще одна ссылка: http://www.mail-archive.com/tcpdump-workers@lists.tcpdump.org/msg04042.html).
Мне пришлось использовать приложение «usbmon», чтобы получить полный захват: http://people.redhat.com/zaitcev/linux /