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.

커널 버전의 경우21년 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는 USB 트래픽을 사용하는 메모리 매핑 메커니즘을 지원하지만 올바르게 처리하지 않기 때문에 libpcap은 사용 가능한 경우 해당 메커니즘을 사용합니다. 사용할 수 없게 될 수 없으므로 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를 읽을 수 있습니다.

관련 정보