• 使用 usbmon 抓取 usb 总线上的数据


    使用 usbmon 抓取 usb 总线上的数据

    usbmon 即 usb monitor,是 linux 内置的 usb 抓包工具。usbmon 本质是一个内核模块,在我的 ubuntu14.0 4中,模块的位置:/lib/modules/4.4.0-31-generic/kernel/drivers/usb/mon/usbmon.ko

    1、检测内核是否支持 debugfs 文件系统

      linux 系统支持很多类型的文件系统,像 ext3、sysfs、ramfs、tmpfs等文件系统,首先检测内核是否支持 debugfs 文件系统。

      

    2、挂载 debugfs 文件系统

      执行 sudo mount -t debugfs none_debugs /sys/kernel/debug 命令,如果提示已经挂载,则下次抓包就无需运行该命令了,表示系统默认会挂载该文件系统。

      

      如上图所示,我的 ubuntu 系统默认已经挂载了 debugfs 文件系统,无需再去手动挂载。

    3、确认内核支持 usbmon 模块

      

      如上图所示,目前内核不支持 usbmon 模块,需要手动安装 usbmon 模块。

     4、安装 usbmon 模块

      执行 modprobe usbmon 命令,可以看到系统成功安装了 usbmon 这个模块。

       

      这里的原理是,usbmon是一个模块,使用 modprobe 安装该模块后,该模块内部调用 debugfs 相关的API,这样在 /sys/kernel/debug/usb 目录下便形成了 usbmon 这个目录。
         查看 /sys/kernel/debug/usb/usbmon 目录,发现该目录下有以下内容:0s、0u、1s、1t、1u、2s、2t、2u其中1代表 bus1,2代表 bus2,0代表所有 usb 总线。

    5、监测 usb 总线上的数据

      首先需要获取想要监测的设备所在的总线以及设备号。linux 中查看USB设备列表以及USB设备详细信息的两种方法
      方法1:执行 lsusb 命令
            

     lsusb命令参数

      -v:显示usb设备的详细信息
      -t:以树状结构显示usb设备的层次
      -s<总线:设备号>:仅显示指定的总线或设备号的设备
      -d<厂商:产品>:仅显示指定厂商和产品编号的设备

      方法2cat /sys/kernel/debug/usb/devices

             
     
      然后就可以根据上面的结果,查看 usb 总线上的数据。
      cat /sys/kernel/debug/usb/usbmon/1u | grep "1:005"  // 其中的1:005是根据第4步中确认的,分配给模块的设备号
      执行该命令,就可以查看模块所挂载的usb总线上的数据传输。
      关于该命令输出的数据所代表的含义,参考我的下一篇博文:详解 usbmon 抓取的 log 各字段的含义
     
  • 相关阅读:
    CComboBox(组合框)控件 学习要点
    弹出菜单的实现
    剪贴板(clipboard)功能
    bash1---基本0
    CHAPTER 2 -----Reapresenting and Manipulating Information(1)
    关于Linux磁盘分区与双系统
    CHAPTER 1 ----- a tour of computer sysytems(3)
    CHAPTER 1 ----- a tour of computer sysytems(2)
    CHAPTER 1 ----- a tour of computer sysytems(1)
    [2017.4.14] 随笔一 ------头文件中用宏定义调试语句(引用C语言写爬虫的初学项目)
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/8467057.html
Copyright © 2020-2023  润新知