USB 트래픽을 덤프하는 방법은 무엇입니까?

USB 트래픽을 덤프하는 방법은 무엇입니까?

USB 게임패드가 있는데 이 주변 장치가 실제로 내 PC/커널로 보내는 신호와 명령을 보고 검사하고 싶습니다. 어떻게 할 수 있습니까?

나는 다음과 같은 것을 가정하고 있었다

cat /dev/bus/usb/006/003

충분했지만 분명히 이 명령은 즉시 반환되어 읽을 수 없는 인코딩된 문자를 인쇄합니다.

그런 USB 장치를 "디버그"하는 방법이 있습니까?

답변1

Wireshark를 사용하여 USB 트래픽을 캡처할 수 있습니다.
그로부터위키:

usbmonLinux에서 USB 트래픽을 덤프하려면 Linux부터 존재했던 모듈이 필요합니다.2.6.11. 해당 모듈에 대한 정보는 /usr/src/linux/Documentation/usb/usbmon.txtLinux 소스 트리에서 확인할 수 있습니다 . 사용 중인 배포판과 해당 배포판의 버전에 따라 해당 모듈은 커널에 내장되거나 로드 가능한 모듈일 수 있습니다. 로드 가능한 모듈인 경우 사용 중인 배포판과 해당 배포판의 버전에 따라 로드될 수도 있고 로드되지 않을 수도 있습니다. 로드 가능한 모듈이고 로드되지 않은 경우 다음 명령을 사용하여 로드해야 합니다.

modprobe usbmon

루트로 실행해야 합니다.

1.0 이전의 libpcap 릴리스에는 USB 지원이 포함되어 있지 않으므로 다음이 필요합니다.적어도libpcap1.0.0.

커널 버전의 경우2.6.21 이전, 사용 가능한 유일한 USB 트래픽 캡처 메커니즘은 각 원시 USB 블록에 대해 캡처되는 총 데이터 양을 약 30바이트로 제한하는 텍스트 기반 메커니즘입니다. 커널을 패치하지 않고는 이를 변경할 수 있는 방법이 없습니다. debugfs가 아직 마운트되지 않은 경우 /sys/kernel/debug루트로 다음 명령을 실행하여 해당 위치에 마운트되었는지 확인하세요.

mount -t debugfs / /sys/kernel/debug

커널 버전의 경우2.6.21 이상, 크기 제한이 없는 USB 패킷을 추적하기 위한 바이너리 프로토콜이 있습니다. 해당 커널 버전의 경우 libpcap이 필요합니다.1.1.0 이상, libpcap 1.0.x USB 지원은 libpcap이 사용 가능한 경우 사용할 USB 트래픽용 메모리 매핑 메커니즘을 사용하지만 올바르게 처리하지 않기 때문에 사용할 수 없게 만들 수 없으므로 libpcap은 항상 이를 사용합니다.

libpcap 1.0.x에서 USB 캡처 장치의 이름은 입니다 .usbnN버스번호 입니다. libpcap 1.1.0 이상에서는 이름이 입니다 .usbmonn

Wireshark도 필요합니다.1.2.x 이상.

답변2

이것이 내가 검색했을 때 찾은 첫 번째 결과이기 때문에 업데이트합니다. Debian Stretch에서 찾은 가장 좋은 방법은 다음과 같습니다:

# usbhid-dump --entity=all

그러면 모든 USB 장치에서 들어오는 데이터가 덤프됩니다. 키보드를 선물처럼 집어들면 스트림의 모든 opcode를 읽을 수 있습니다.

관련 정보