Фильтры USB в Wireshark: как найти нужное устройство с USBPcap, usbmon и Bus Scope
Как фильтровать USB-захваты по устройству, конечной точке, типу передачи, setup-пакету, интерфейсу и таймингу, когда USBPcap или usbmon выдают слишком много трафика.
USB-захваты быстро становятся перегруженными. На одной машине одновременно могут быть активны клавиатура, мышь, веб-камера, Bluetooth-адаптер, накопитель, serial-адаптер, ключ безопасности и внутренний концентратор. Когда пользователи ищут «Wireshark USB filter», «USBPcap filter device», «usbmon filter endpoint», «как найти моё USB-устройство в захвате», у них обычно одна и та же проблема: "в захвате слишком много трафика и слишком мало структуры." Bus Scope создан для того, чтобы проверка USB была более прямой, но понимать проблему фильтрации всё равно полезно. Захват идёт из USBPcap в Windows, из usbmon в Linux или из другого USB-источника — ключ в том, чтобы опознать устройство и сузить трассу по адресу, конечной точке, типу передачи и управляющему запросу.
Начните с перечисления
Самый простой способ опознать USB-устройство — захватить с момента включения. Перечисление содержит дескрипторы с именем устройства, vendor ID, product ID, конфигурациями, интерфейсами, конечными точками и классовыми деталями.
Ищите:
- Vendor ID
- Product ID
- Device descriptor
- Configuration descriptor
- Interface descriptors
- Endpoint descriptors
- String descriptors
SET_ADDRESSSET_CONFIGURATION
Если начать захват после того, как устройство уже работает, можно увидеть только трафик конечных точек без контекста дескрипторов. Тогда фильтровать сложнее, потому что одних только номеров конечных точек недостаточно.
Адрес устройства может меняться
Адреса USB-устройств назначаются хостом во время перечисления. Если устройство отключится и подключится заново, адрес может смениться. Фильтр, который сработал при первом подключении, может пропустить второе.
Это важно при отладке циклов сброса. Если устройство пере-нумеруется раз за разом, в одном захвате нужно отслеживать несколько адресов. Дескрипторы вендора/продукта показывают, что эти адреса принадлежат одному и тому же физическому устройству.
Bus Scope помогает сохранять эту связь видимой, вместо того чтобы заставлять вас вручную сшивать изменения адресов.
Фильтр по конечной точке
После конфигурации основной поток данных идёт через конечные точки. Endpoint 0 — это управляющая конечная точка. Остальные могут быть bulk, interrupt или isochronous.
Типичные значения конечных точек:
0x00: control OUT на endpoint 00x80: control IN на endpoint 00x81: endpoint 1 IN0x01: endpoint 1 OUT0x82: endpoint 2 IN0x02: endpoint 2 OUT
Бит направления важен. 0x81 и 0x01 — это разные направления одной точки. Например, serial-адаптер может использовать один bulk OUT для данных хост → устройство и один bulk IN для данных устройство → хост.
Фильтры по конечным точкам полезны, когда вы уже знаете, какая точка несёт нужный трафик.
Фильтр по типу передачи
Разные USB-проблемы живут в разных типах передач:
- Control: дескрипторы, конфигурация, классовые запросы, вендорные команды.
- Bulk: накопители, данные serial, вендорные данные, многие устройства захвата.
- Interrupt: HID-ввод, статусные уведомления, low-latency репорты.
- Isochronous: аудио, видео, чувствительные ко времени потоки.
Если USB serial открывается, но не шлёт данные, проверьте управляющие передачи для line coding и control line state, затем bulk-конечные точки для полезной нагрузки. Если веб-камера запускается, но видео битое — проверьте изохронные передачи и alternate settings. Если HID-устройство сбоит — управляющие запросы и report descriptor для прерываний.
Фильтрация по типу передачи уменьшает шум, сохраняя нужный класс данных.
Фильтр по setup-пакету
Управляющие передачи содержат setup-пакеты. Они крайне полезны, потому что задают направление, тип, получателя, код, значение, индекс и длину запроса.
Важные примеры:
GET_DESCRIPTORSET_ADDRESSSET_CONFIGURATIONSET_INTERFACECLEAR_FEATURE- HID
GET_REPORT - HID
SET_REPORT - CDC
SET_LINE_CODING - CDC
SET_CONTROL_LINE_STATE - Вендорные команды
Когда устройство падает во время setup, setup-пакет обычно точно указывает, какой запрос вызвал проблему.
Выбор захвата USBPcap в Windows
В Windows USBPcap захватывает с хост-контроллеров USB. Если в машине несколько контроллеров, неправильный выбор может дать захват вообще без трафика целевого устройства.
Практический сценарий:
- Отключите целевое устройство.
- Запустите захват на вероятном контроллере.
- Подключите устройство.
- Ищите дескрипторы перечисления.
- Если ничего нет — попробуйте другой контроллер.
- Когда устройство найдено, держите этот захват как образец.
Ценность Bus Scope в том, чтобы сделать этот процесс менее непрозрачным: целью является диалог с USB-устройством, а не огромный список пакетов.
Захват через usbmon в Linux
В Linux usbmon открывает USB-трафик шины. Номер шины имеет значение. Устройство, показанное как Bus 003 Device 012, сейчас находится на шине 3. После переподключения номер устройства может измениться.
Самый полезный захват начинается до подключения, потому что перечисление раскрывает идентичность устройства. Если права мешают захвату, сначала решите это, иначе вы увидите только прикладной сбой и не увидите USB-доказательств.
Типичные ошибки фильтрации
Избегайте таких ошибок:
- Фильтровать только после сбоя и пропустить перечисление.
- Считать, что адрес устройства стабилен между переподключениями.
- Путать направление конечной точки.
- Игнорировать управляющий трафик endpoint 0.
- Смотреть только на payload-пакеты и пропускать классовые запросы.
- Считать все вендорные запросы шумом.
- Слишком рано отбрасывать reset и ошибки.
- Игнорировать контекст концентратора и порта.
Чистый фильтр полезен, только если в нём сохранилась причина сбоя.
Что хранить в исследовательском захвате
Для отчёта, который можно передать команде прошивки, драйверов или QA, сохраните:
- Начальное перечисление.
- Дескрипторы целевого устройства.
- Выбранную хостом конфигурацию и интерфейс.
- Классовые или вендорные запросы до сбоя.
- Трафик конечных точек, относящийся к сбою.
- Событие reset, stall, тайм-аут или отключения.
- Достаточно временного контекста, чтобы понять: сбой мгновенный, после простоя или под нагрузкой.
Такие данные убедительнее скриншота «устройство не распознано».
Итоговый диагноз
USB-фильтрация — это не просто спрятать шум. Это сохранить последовательность пакетов, которая объясняет сбой. Начните с перечисления, опознайте устройство, отследите смены адреса, сузьте по конечной точке и типу передачи, держите управляющие запросы видимыми.
Bus Scope создан поддерживать такой рабочий процесс: быстро найти настоящий USB-диалог, а затем изучить данные шины, объясняющие, почему устройство работает, останавливается, сбрасывается или исчезает.