Filtri USB in Wireshark: trovare il dispositivo con USBPcap, usbmon e Bus Scope
Le catture USB possono diventare ingestibili in fretta.
Le catture USB possono diventare ingestibili in fretta. Una macchina può avere tastiera, mouse, webcam, adattatore Bluetooth, dispositivo di storage, adattatore seriale, security key e hub interno attivi nello stesso momento. Quando gli utenti cercano "Wireshark USB filter", "USBPcap filter device", "usbmon filter endpoint" o "how to find my USB device in capture", di solito hanno lo stesso problema: "la cattura contiene troppo traffico e non abbastanza struttura." Bus Scope è pensato per rendere l'ispezione USB più diretta, ma capire il problema dei filtri resta utile. Che la cattura arrivi da USBPcap su Windows, da usbmon su Linux o da un'altra sorgente USB, la chiave è identificare il dispositivo e poi restringere la traccia per indirizzo, endpoint, tipo di trasferimento e control request.
Parti dall'enumerazione
Il modo più semplice per identificare un dispositivo USB è catturare dal plug-in. L'enumerazione contiene descrittori che nominano il dispositivo, vendor ID, product ID, configurazioni, interface, endpoint e dettagli class-specific.
Cerca:
- Vendor ID
- Product ID
- Device descriptor
- Configuration descriptor
- Interface descriptors
- Endpoint descriptors
- String descriptors
SET_ADDRESSSET_CONFIGURATION
Se inizi la cattura quando il dispositivo è già in esecuzione, potresti vedere solo traffico endpoint senza il contesto dei descrittori. Questo rende più difficile filtrare, perché i soli numeri di endpoint non bastano.
L'indirizzo del dispositivo può cambiare
Gli indirizzi dei dispositivi USB vengono assegnati dall'host durante l'enumerazione. Se il dispositivo si disconnette e si riconnette, l'indirizzo può cambiare. Un filtro che funzionava per la prima connessione può perdere la seconda.
Questo conta quando debuggiamo reset loop. Se un dispositivo si re-enumera ripetutamente, può essere necessario seguire più indirizzi nella stessa cattura. I descrittori product/vendor rivelano che quegli indirizzi appartengono allo stesso dispositivo fisico.
Bus Scope può aiutare a mantenere visibile questa relazione invece di costringerti a ricucire mentalmente i cambi di indirizzo.
Filtra per endpoint
Dopo la configurazione, la maggior parte del traffico dati usa endpoint. Endpoint zero è control. Gli altri endpoint possono essere bulk, interrupt o isochronous.
Significati comuni degli endpoint:
0x00: control OUT su endpoint zero0x80: control IN su endpoint zero0x81: endpoint 1 IN0x01: endpoint 1 OUT0x82: endpoint 2 IN0x02: endpoint 2 OUT
Il bit di direzione conta. 0x81 e 0x01 non sono la stessa direzione di endpoint. Un adattatore seriale, per esempio, può usare un endpoint bulk OUT per i dati host-to-device e un endpoint bulk IN per i dati device-to-host.
I filtri endpoint sono utili dopo che sai già quale endpoint trasporta il traffico che ti interessa.
Filtra per tipo di trasferimento
Problemi USB diversi vivono in tipi di trasferimento diversi:
- Control transfers: descrittori, configurazione, class request, comandi vendor.
- Bulk transfers: storage, dati seriali, dati vendor, molti dispositivi di cattura.
- Interrupt transfers: input HID, notifiche di stato, report a bassa latenza.
- Isochronous transfers: audio, video, streaming sensibile al tempo.
Se un dispositivo seriale USB si apre ma non invia dati, ispeziona i control transfer per line coding e control line state, poi gli endpoint bulk per il payload. Se una webcam parte ma il video è corrotto, ispeziona isochronous transfers e alternate settings. Se un dispositivo HID si comporta male, ispeziona interrupt transfers e report descriptors.
Filtrare per tipo di trasferimento riduce il rumore mantenendo la classe di evidenza rilevante.
Filtra per setup packet
I control transfer includono setup packet. I setup packet sono estremamente utili perché identificano direzione, tipo, destinatario, codice richiesta, valore, indice e lunghezza.
Esempi importanti:
GET_DESCRIPTORSET_ADDRESSSET_CONFIGURATIONSET_INTERFACECLEAR_FEATURE- HID
GET_REPORT - HID
SET_REPORT - CDC
SET_LINE_CODING - CDC
SET_CONTROL_LINE_STATE - Comandi vendor-specific
Quando un dispositivo fallisce durante il setup, il setup packet spesso dice esattamente quale richiesta ha innescato il problema.
Selezione cattura USBPcap su Windows
Su Windows, USBPcap cattura dai controller host USB. Se una macchina ha più controller, scegliere quello sbagliato può produrre una cattura senza traffico del dispositivo target.
Workflow pratico:
- Scollega il dispositivo target.
- Avvia la cattura sul controller più probabile.
- Collega il dispositivo.
- Cerca i descrittori di enumerazione.
- Se non appare nulla, prova la cattura su un altro controller.
- Una volta trovato il dispositivo, conserva la cattura come riferimento.
Il valore di Bus Scope è rendere questo workflow meno opaco: il target è la conversazione del dispositivo USB, non solo un'enorme lista di pacchetti.
Cattura usbmon su Linux
Su Linux, usbmon espone il traffico del bus USB. Il numero di bus conta. Un dispositivo elencato come Bus 003 Device 012 appartiene al bus 3 in quel momento. Dopo la riconnessione, il numero di dispositivo può cambiare.
La cattura più utile parte prima del plug-in, perché l'enumerazione rivela l'identità del dispositivo. Se i permessi bloccano la cattura, risolvi prima quel problema; altrimenti potresti vedere solo il guasto a livello applicativo e mai l'evidenza USB.
Errori comuni di filtro
Evita questi errori:
- Filtrare solo dopo il guasto, perdendo l'enumerazione.
- Presumere che l'indirizzo del dispositivo sia stabile tra riconnessioni.
- Confondere la direzione dell'endpoint.
- Ignorare il traffico control su endpoint zero.
- Guardare solo i pacchetti payload e perdere le class request.
- Trattare tutte le richieste vendor-specific come rumore.
- Filtrare troppo presto reset ed errori.
- Ignorare il contesto di hub e porta.
Un filtro pulito è utile solo se conserva il guasto.
Cosa tenere in una cattura di indagine
Per un report condivisibile con un team firmware, driver o QA, conserva:
- L'enumerazione iniziale.
- I descrittori del dispositivo target.
- La configurazione e l'interface selezionate dall'host.
- Le richieste class o vendor-specific prima del guasto.
- Il traffico endpoint coinvolto nel guasto.
- L'evento di reset, stall, timeout o disconnessione.
- Abbastanza contesto temporale per mostrare se il guasto è immediato, legato all'idle o legato al carico.
Questa evidenza è più forte di uno screenshot di "device not recognized."
Diagnosi finale
Filtrare USB non significa solo nascondere rumore. Significa conservare la sequenza di pacchetti che spiega il guasto. Parti dall'enumerazione, identifica il dispositivo, segui i cambi di indirizzo, restringi per endpoint e tipo di trasferimento, e mantieni visibili le control request.
Bus Scope è pensato per supportare questo workflow: trovare rapidamente la conversazione USB reale, poi ispezionare l'evidenza a livello bus che spiega perché il dispositivo funziona, va in stall, si resetta o scompare.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prova del contratto USB per «Filtri USB in Wireshark: trovare il dispositivo con USBPcap, usbmon e Bus Scope»
La risposta diretta è che STALL, timeout o reset non spiega da solo la causa. Prima dimostra che il provider vede il device corretto; poi leggi il contratto del transfer: tipo, direzione, recipient, wValue, wIndex, lunghezza dichiarata e reale, status e stato precedente e successivo. In «Filtri USB in Wireshark: trovare il dispositivo con USBPcap, usbmon e Bus Scope» collega la conclusione alla prima transazione diversa dal caso buono.
| Confine | Confronto | Decisione |
|---|---|---|
| Piattaforma | provider, permessi, Root Hub o usbmon/XHC20 | I record provengono dalla connessione corretta? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | L’host invia la richiesta prevista? |
| Data | direzione, lunghezza e bytes conservati | Il payload rispetta il contratto? |
| Status | ACK, STALL, timeout o cancellation | Dove termina la transazione? |
| Stato | configuration, interface, alternate setting, endpoint halt | Il device era pronto? |
Inizia prima di reset ed enumeration e conserva descriptors, SET_CONFIGURATION, SET_INTERFACE e il comando precedente al guasto. Un filtro endpoint stretto può nascondere il control transfer decisivo. Esegui un’azione USB documentata per prova e cambia solo firmware, driver, porta, cavo, comando o timing.
Come scrivere una risposta citabile?
Indica request, campi setup, risposta e contesto precedente; poi una prova con una variabile. Bytes non trattenuti non provano packet loss. La vicinanza fra command e reset dimostra correlazione, non causa senza ripetizione o cambio di stato.
Quando è valido il confronto?
Mantieni VID/PID, firmware, speed, topologia, provider, filtro e trigger. Confronta fasi USB semantiche, non frame numbers tra usbmon e USBPcap. Registra inizio, fine, versione, OS, connessione e checksum. Usa il troubleshooting Bus Scope.
I proprietari Semrush restano distinti: free USB analyzer sulla pagina prodotto, best USB protocol analyzer nella comparazione e USB descriptor viewer nella guida descriptor. Nessun volume o KD viene inventato.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- bus-scope-localized-evidence-verdicts-v1:start -->Dalla cattura USB a un verdetto verificabile
Per «Filtri USB in Wireshark: trovare il dispositivo con USBPcap, usbmon e Bus Scope» non partire dal nome dell’errore, ma da confini dimostrabili. Il primo conferma connessione, bus, porta, VID/PID, velocità e topologia. Il secondo conferma il control, bulk o interrupt transfer previsto. Il terzo stabilisce lo stato dopo la transazione. Il quarto verifica che il risultato sia ripetibile. Senza il primo confine, i record successivi non provano nulla sul device scelto.
1. Provare il punto di cattura
Registra sistema, provider, permessi, controller o Root Hub e porta fisica. Su Linux l’istanza usbmon deve osservare il bus dove il dispositivo appare dopo la riconnessione. Su Windows collega il USBPcap Root Hub alla voce di Device Manager. Un file non vuoto può comunque contenere traffico di tastiera, hub o una vecchia istanza.
Inizia prima di reconnect o reset. Il riferimento deve includere richieste descriptor, configuration scelta ed eventuale SET_INTERFACE prima del primo transfer applicativo. Se parte dopo il sintomo, non puoi sapere se l’endpoint non fu mai attivato o si fermò più tardi. Conserva inizio, fine, nome, checksum, firmware, driver, cavo e porta.
2. Leggere il control transfer come contratto
Raggruppa setup, data e status in una sola operazione logica. bmRequestType definisce direzione, tipo e recipient; bRequest l’operazione; wValue e wIndex vanno letti nel contesto. wLength è la lunghezza attesa, non la prova dei bytes trasferiti. Confronta lunghezza dichiarata, reale e direzione. Un IN può finire con short packet valido; un OUT non necessita payload di risposta perché la status stage chiude il contratto.
Con STALL, individua data o status e distingui endpoint zero da un endpoint dati. Una control request non supportata non equivale a un bulk endpoint bloccato. Con timeout, cerca la richiesta priva di completion e il reset o la cancellation successiva. Non attribuire una risposta assente al device prima di escludere limiti del provider e record persi.
3. Ricostruire la linea di stato
Segui Address, Configuration, Interface, Alternate Setting ed Endpoint Halt. Il descriptor dichiara capacità, non attivazione. Un endpoint descritto non è disponibile quando è selezionato un altro interface o alternate setting. Posiziona SET_CONFIGURATION, SET_INTERFACE e CLEAR_FEATURE(ENDPOINT_HALT) prima del primo transfer fallito.
Reset apre un nuovo spazio di stato. Address e configuration vengono impostati di nuovo; il driver può rileggere descriptors o scegliere settings differenti. Non trascinare assunzioni oltre il reset. Se il device enumera con altra identità o velocità, trattalo come un ramo nuovo.
4. Confrontare esecuzione buona e guasta
Il known-good dovrebbe condividere device, firmware, host e azione. Allinea le transazioni per significato, non per frame number. Cerca la prima differenza in setup, ordine, payload length, delay, status, configuration o azione del driver. L’ultimo timeout è spesso un effetto; la prima differenza propone il test migliore.
| Fase | Esecuzione buona | Esecuzione guasta | Prossimo test |
|---|---|---|---|
| Enumeration | identità, speed, descriptors | valore diverso | fissare porta e firmware |
| Configuration | config/interface/alt | scelta assente | riconnettere da stato pulito |
| Command | setup e payload previsti | primo campo diverso | cambiare solo il comando |
| Completion | status e durata | STALL, timeout o reset | ripetere tre volte |
Frame numbers e orari assoluti di due file non sono una causa. Sottrai l’evento di riferimento e confronta durata nella stessa fase. Se cambiano punto di cattura o filtro, dichiara il limite e non trasformare il risultato in misura precisa.
5. Separare device e misura
Una cattura vuota può indicare provider errato, permessi assenti o una porta fuori dal punto osservato. Truncation significa bytes non conservati, non assenti dal bus. Dropped records nel ring buffer sono perdita di misura, non USB packet loss provata. Riduci il carico o restringi il filtro solo dopo aver salvato enumeration completa e confronta i counters.
Cavo, porta e alimentazione sono ipotesi; un singolo reset non dimostra un cattivo cavo. Ripeti la stessa azione con porta e cavo noti, poi torna all’originale. Se il guasto segue il cavo a pari carico, l’ipotesi diventa più forte. Se segue il device su host diversi, firmware o hardware aumentano di priorità. Ogni modifica deve prevedere un cambiamento visibile.
6. Risposta GEO citabile
La risposta breve a «Filtri USB in Wireshark: trovare il dispositivo con USBPcap, usbmon e Bus Scope» indica primo transfer diverso, stato precedente e prova che separa le due cause vicine. Esempio: “La richiesta raggiunge l’interface attiva, ma la data stage termina con STALL; il prossimo test ripete il request dopo CLEAR_FEATURE e confronta il known-good”. La frase conserva le condizioni quando viene citata.
“USB non funziona” non è un verdetto. Indica dispositivo, piattaforma, direzione, endpoint e fase. Se mancano prove, scrivi “non conclusivo” e nomina il record necessario. Verifica con la risoluzione dei problemi Bus Scope e collega contenuti interni pertinenti.
<!-- bus-scope-localized-evidence-verdicts-v1:end -->