文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>插入一个键盘时capture的数据

插入一个键盘时capture的数据

时间:2009-03-23  来源:废墟

系统是Linux,数据通过usbmon capture的。
usbmon的使用参考 Document/usb/usbmon.txt 文件

简单的说明:

usbmon 是一个内核层面的用于搜集usb BUS上的IO活动的设备
这个功能设备类似于被网络监测程序使用的包套接字
相似的 希望有一个类似于tcpdump这样的用于分析 usbmon原始数据的工具 比如usbdump或者
USBMon报告外设driver对hcd提交的请求

如果hcd是一个多功能的,被usbmon提交的跟踪数据不能精确的对应到总线上的传输
这与tcpdump一样

*怎么使用usbmon来收集原始的文本跟踪数据
不像packet 套接字,usbmon有一个接口用于导出文本类型跟踪数据
这么作有两个目的  1。xxx 2。人类可以读取的以防工具不能使用的情况

执行下面的步骤 来收集这些数据
1。mount -t debugfs none_debugs /sys/kernel/debug
2。modprobe usbmon
验证一下 bus类的套接字是否存在
3。ls /sys/kernel/debug/usbmon
0s 0t 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

可以直接使用bus0来抓取所有总线上的数据包
或者找到你的设备在哪条bus上

cat /proc/bus/usb/devices  找到T打头的那一行,通过vendor的判断
找出设备
T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0557 ProdID=2004 Rev= 1.00
S:  Manufacturer=ATEN
S:  Product=UC100KM V2.00

Bus=03 意味着他是在bus 3上
 
4。cat /sys/kernel/debug/usbmon/3u >/tmp/1.mon.out
这个过程会持续读取数据直到被kill了

在usb bus上执行一些操作
比如: 插入一个flash设备 cp文件 控制一个摄像头

数据格式
1U格式  从左到右
-URB Tag  urb数据结构的内核态地址
-时间戳 ?
-Event Type. S - submission  C-callback E-submission error
-"Address" word(以前是管道) 包括了四列 URB type and 方向,
Bus号,设备地址,端点号
type与方向使用两个字节来表示
Ci Co control input and output
Zi Zo 同步输入输出
Ii Io 中断输入输出
Bi Bo 块输入输出

-urb 状态字 是一个字母 或者是几个分开的数字urb status,interval,start frame,error count
 这些列都是可选的 如interval 中断和同步urbs 。start frame 同步urbs 。error count 同步callback
 urb status有可能是一个负数,在平时没有什么用处,当有错误发生时,它会包含一个错误码
 如果是一个控制包的话,将以一个字母s来替代 
      
-setup包 (co,ci才有的)
 bmRequestType,bRequest,wValue,wIndex,wLength.  s 后面跟的数据的含义

-同步帧描述符以及描述符自身的个数 (同步有的)
 同步传输才有的,包括3列 status, offset, length
 
-数据长度 对于提交 这是请求的长度 对于回应 这是真实的长度 (肯定有的)
 
-数据标签 usbmon并不是总能抓取到数据,即使长度是非零的
 tag 是 "="的数据才有意义的
 
-数据流 以大端16进制格式表示 需要注意的是他们不是机器字(usb数据是小端的)
 字节流被字切割 会比报告的数据长度要短。

-

980000009e97a780 2145394835 S Ci:4:001:0 s a3 00 0000 0001 0004 4 <
a3+00请求是GetPortStatus, wWvlaue=0, port=1, 数据长度4
980000009e97a780 2145395757 C Ci:4:001:0 0 4 = 00010000
数据为00010000  对应的解释为 ?
980000009e97a780 2145396153 S Ci:4:001:0 s a3 00 0000 0002 0004 4 <
其他同上,port=2
980000009e97a780 2145396501 C Ci:4:001:0 0 4 = 01030100
数据为01030100  对应的解释为这个port不是power-off的状态,?
980000009e97a780 2145396816 S Co:4:001:0 s 23 01 0010 0002 0000 0
23请求是ClearPortFeature,01为CLEAR_FEATURE,0010为PortSuspend
0002为00指 02指port 
980000009e97a780 2145397109 C Co:4:001:0 0 0
上一个请求没有data的
980000009e97a780 2145397431 S Ci:4:001:0 s a3 00 0000 0003 0004 4 <
a3+00请求是GetPortStatus  port=3                   
980000009e97a780 2145397720 C Ci:4:001:0 0 4 = 00010000

980000009e97a780 2145397994 S Ci:4:001:0 s a3 00 0000 0004 0004 4 <
a3+00 GetPortStatus port=4
980000009e97a780 2145398277 C Ci:4:001:0 0 4 = 00010000
data
980000009e3df180 2145502705 S Ii:4:001:1 -150:128 2 <

980000009e97a780 2145503610 S Ci:4:001:0 s a3 00 0000 0002 0004 4 <
a3+00 GetPortStatus  0002=port 0004=wLength
980000009e97a780 2145504001 C Ci:4:001:0 0 4 = 01030000
data
980000009e97a780 2145504374 S Co:4:001:0 s 23 03 0004 0002 0000 0
23+03的请求是SetPortFeature, 0004=PortReset 0002=Port
980000009e3df180 2145515593 C Ii:4:001:1 0:128 1 D
980000009e3df180 2145515616 S Ii:4:001:1 -150:128 2 <

980000009e97a780 2145554836 C Co:4:001:0 0 0
no data
980000009e97a780 2145610846 S Ci:4:001:0 s a3 00 0000 0002 0004 4 <
a3+00的请求是GetPortStatus  0002=port
980000009e97a780 2145611555 C Ci:4:001:0 0 4 = 03031000
data
980000009e97a780 2145666831 S Co:4:001:0 s 23 01 0014 0002 0000 0
23+01是ClearPortFeature  0014=C_PORT_RESET (将相应位清零)
980000009e97a780 2145667392 C Co:4:001:0 0 0
no data
980000009e97a780 2145667765 S Ci:4:000:0 s 80 06 0100 0000 0040 64 <
80+06 GetDescript 01(00)=device 0040=length
980000009e97a780 2145669820 C Ci:4:000:0 0 18 = 12011001 00000008 67120301 01010000 0001
data 数据格式为 该请求是标准的设备描述符请求,验证一个设备是否属于HID类的一般不会使用class subclass来
确定,而是通过interface的描述来确定.
在这个描述里面 我们能够知道vendorID productID  MaxPacketSize Class Subclass 等
(参考 262页 usb2.0 spec)
980000009e97a780 2145673283 S Co:4:001:0 s 23 03 0004 0002 0000 0
23+03 SetPortFeature,0004=PortRest, 0002=Port
980000009e97a780 2145734876 C Co:4:001:0 0 0
no data
980000009e3df180 2145762851 C Ii:4:001:1 0:128 1 D
980000009e3df180 2145762870 S Ii:4:001:1 -150:128 2 <

980000009e97a780 2145790834 S Ci:4:001:0 s a3 00 0000 0002 0004 4 <
a3+0 GetPortStatus    0002=Port
980000009e97a780 2145791457 C Ci:4:001:0 0 4 = 03031000
data
980000009e97a780 2145846860 S Co:4:001:0 s 23 01 0014 0002 0000 0
23+01 ClearPortFeature 0014=C_PORT_RESET 0002=port
980000009e97a780 2145847527 C Co:4:001:0 0 0
no data
980000009e97a780 2145847902 S Co:4:000:0 s 00 05 0013 0000 0000 0
00+05 SetAddress 0013=address
980000009e97a780 2145848786 C Co:4:000:0 0 0
no data
980000009e97a780 2145870847 S Ci:4:019:0 s 80 06 0100 0000 0012 18 <
80+06 GetDescriptor  01(00)=device 0012=length
980000009e97a780 2145872784 C Ci:4:019:0 0 18 = 12011001 00000008 67120301 01010000 0001
data
980000009e97a780 2145872837 S Ci:4:019:0 s 80 06 0200 0000 0009 9 <
80+06 GetDescriptor 02(00)=configure  0009=length
980000009e97a780 2145874771 C Ci:4:019:0 0 9 = 09023b00 020100a0 32
data 0x32=50 50x2=100mA
a0表示可以从bus上获取电源并且支持remote wakeup
(参考265 usb2.0 spec)
980000009e97a780 2145874839 S Ci:4:019:0 s 80 06 0200 0000 003b 59 <
80+06 GetDescriptor 02(00)=configure  0003b=length
980000009e97a780 2145879771 C Ci:4:019:0 0 59 = 09023b00 020100a0 32090400 00010301 01000921 10010001 22360007 05810308
data (config+first interface+first endpoint + second interface + second endpoint)
(class 69页)
980000009e97a780 2145886958 S Co:4:019:0 s 00 09 0001 0000 0000 0
00+09 SetConfiguration 0001=config value
980000009e97a780 2145887782 C Co:4:019:0 0 0
nodata
980000009e97a780 2145891248 S Co:4:019:0 s 21 0a 0000 0000 0000 0
21+0a Set_Idle Request (21含义可从class manual 50页) (00)(00)=(duration)(ReportID)
0000=interface 0000=wLength 0=data length
980000009e97a780 2145891765 C Co:4:019:0 0 0
nodata
980000009e97a780 2145894836 S Ci:4:019:0 s 81 06 2200 0000 0036 54 <
81+06 HID类Get_Descriptor Request(class manual 49页) (22)00=(00100010)class
980000009e97a780 2145897774 C Ci:4:019:0 0 54 = 05010906 a1010508 19012903 15002501 75019503 91029505 91010507 19e029e7
data 
(参考 class 69页)
980000009e3dd680 2145906865 S Ii:4:019:1 -150:8 8 <
980000009e97b380 2145923663 S Co:4:019:0 s 21 0a 0000 0001 0000 0
21+0a (HID)Set_Idle Request 0000= 0001=interface 0000=wLength
980000009e97b380 2145924773 C Co:4:019:0 0 0
nodata
980000009e97b380 2145925504 S Ci:4:019:0 s 81 06 2200 0001 0034 52 <
81+06 (HID)Get_Descriptor Request 2200=  0001=interface 0034=wLength
980000009e97b380 2145928771 C Ci:4:019:0 0 52 = 050c0901 a1018501 19002a3c 02150026 3c029501 75108100 c0050109 80a10185
data
980000009e97ad80 2145933342 S Ci:4:019:0 s a1 01 0101 0001 0003 8 <
a1+01 (HID)Get_Report Request (01)01=(Input)(mouse?  00 kbd) 0001=interface 0003=wlength
980000009e97ad80 2145934770 C Ci:4:019:0 0 3 D
data
980000009e97ad80 2145934770 S Ci:4:019:0 s a1 01 0102 0001 0002 8 <
a1+01 (HID)Get_Report Request 0102=          0001=interface 0002
980000009e97ad80 2145935763 C Ci:4:019:0 0 2 D

980000009e74ca80 2145947594 S Ii:4:019:2 -150:8 3 <
980000009e97aa80 2145963747 S Ci:4:001:0 s a3 00 0000 0002 0004 4 <
a3+00 (HID)Get Port Status 0000 0002=port 0004=4
980000009e97aa80 2145963868 C Ci:4:001:0 0 4 = 03030000
data
相关阅读 更多 +
排行榜 更多 +
rento大富翁手游

rento大富翁手游

休闲益智 下载
冲撞赛车3无限金币版

冲撞赛车3无限金币版

赛车竞速 下载
电动火车模拟器内置菜单

电动火车模拟器内置菜单

赛车竞速 下载