我如何使用“仅”它是“USB地址”ergo usb 3-1从“任何”设备检索数据,以便转储连接到此端口的“任何”
与任何其他描述符相反
“不是”“不是”/dev/etc...我不是在寻找第三方软件,只是普通的 LINUX短的命令行答案
答案1
大多数 USB 设备根本无法以这种方式工作。
只有极少数 USB 设备类型(主要是鼠标、键盘、操纵杆等输入设备)可以在没有特别要求的情况下在 USB 总线上发送数据。除非您首先向 USB 设备发送适当的请求,否则大多数 USB 设备不会输出任何数据。
那么就有一个问题USB端点。每个USB设备可以有多个端点;您可以将它们视为类似于 TCP 端口号。对于特定数据流,始终有一个“控制”端点和任意数量的其他端点。一些端点仅用于输入,其他端点仅用于输出。要从 USB 设备获取有意义的数据,您需要某种方法来识别您正在连接的设备的哪个端点。
或者,如果您的问题是关于转储原始 USB 数据包流,它通常隐藏在 Linux USB 驱动程序层后面。要访问原始数据包流,您需要挂载debugfs
文件系统并加载内核usbmon
模块。现在,您可以执行一些操作,例如cat /sys/kernel/debug/usb/usbmon/0u
获取系统上所有 USB 流量的转储,或者使用另一个总线编号代替 0 来仅获取特定 USB 总线的流量。该模块还将提供/dev/usbmon*
用于更高级 USB 流量分析程序的设备。
要获得更有用的 USB 流量转储,您可以使用 Wireshark 捕获 USB 流量。Wireshark 将自动识别各种 USB 协议元素,并将进出不同 USB 端点的数据流分开,并允许您将 USB 数据包标头和实际有效负载数据彼此分开。您仍然需要适当的 USB 设备类型标准文档以及可能的特定设备的技术文档才能真正理解数据,但使用 Wireshark 将使该过程变得更加容易。
答案2
简短回答:
lsusb
较长答案的示例,可以直接显示通过指定设备连接的内容:
sudo grep -ir "usb" /var|grep -i 'usb 3-1'|tail -n25
tail -n50
或者,如果您需要更多信息,请使用或 代替 来less
查看此输出的更多信息tail
。
答案3
我认为当您说“任何设备”时,您实际上指的是“任何块设备”,例如 USB 闪存驱动器(毕竟,从键盘转储数据意味着什么?或风扇?)。
如果您正在运行一个相当现代的 udev,那么您应该拥有/dev/disk/by-path
.例如,插入我工作站上特定端口的 USB 闪存驱动器将始终为:/dev/disk/by-path/pci-0000:00:1a.7-usb-0:2:1.0-scsi-0:0:0:0
。
要了解计算机上的内容,最简单的方法就是将某些东西插入其中,然后查看 中显示的内容/dev/disk/by-path
。