1

我只是不能做一件简单的事情来读取字符串描述符。这是带有 pyusb 包装器的简单代码(只是为了简化代码),但即使使用 le libsub 原始库,问题仍然存在。

import usb.core
import usb.util
devs = usb.core.find(find_all=True)
for dev in devs:
    try:
        print usb.util.get_string(dev, 255, dev.iManufacturer)
    except usb.core.USBError:
        pass

如果我在没有 root 权限的情况下执行此操作,我将一无所获(所有循环迭代都会引发异常)。如果我以 root 权限执行,我会得到一些字符串描述符和一些异常。在这种情况下,我知道异常是正常的,因为管道错误意味着设备不提供任何字符串描述符。

问题是:如何在没有 root 权限的情况下获取字符串描述符?该命令lsusb检索所有信息,并且在未启用 suid 位的情况下执行此操作。

4

1 回答 1

1

我也遇到过这个问题。似乎 pyusb 默认情况下以读写方式打开设备,而lsusb以只读方式打开它们,如本$ strace lsusb摘录中所示:

...
open("/sys/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1:1.0/uevent", O_RDONLY|O_CLOEXEC) = 6
...

我通过使所有 USB 设备都可以读取/写入来解决了这个问题,但是从安全的角度来看,这绝对不是最佳的(键盘记录器等)......

于 2013-09-09T10:03:03.273 回答