首页
学习
活动
专区
圈层
工具
发布

USB HID通信协议详解

USB HID通信协议详解 一、什么是USB HID? USB HID(Human Interface Device,人机接口设备)是USB协议中的一个标准设备类别,专门为需要与人交互的设备设计。...对比表格:HID vs 其他USB设备类型 特性 USB HID设备 其他USB设备(如存储设备) 主要用途 人机交互 数据传输、存储 通信方式 中断传输为主 批量传输为主 延迟要求 低延迟(实时响应...HID描述符 - 告诉主机这是一个HID设备 struct hid_descriptor { uint8_t bLength; // 描述符长度 uint8_t...跨平台兼容性好 灵活 - 可通过报告描述符自定义功能 ⚠️ 局限: 数据量有限 - 不适合大数据传输 描述符复杂 - 学习曲线较陡 带宽受限 - 高速设备可能需要其他方案 总结 USB HID协议是人机交互设备的基石...随着技术的发展,HID over USB-C、无线HID等扩展也在不断演进,但核心的HID协议概念始终保持一致,这充分体现了其设计的优雅和前瞻性。

18510

USB初学(一)---USB-HID的初步认识【转】

HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容。 USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备。...bDeviceSubClass; //usb分配的子类代码,同上,值由USB规定和分配的,HID设备此值为0 BYTE bDeviceProtocl; //USB分配的设备协议代码,同上HID...当插入USB设备后,主机会向设备请求各种描述符来识别设备。 为了把一个设备识别为HID类别,设备在定义描述符的时候必须遵守HID规范。 ?...USB HID类可采用的通信管道 所有的HID设备通过USB的控制管道(默认管道,即端点0)和中断管道与主机通信。...表1、USB HID规范定义的HID设备可用端点 管道 要求 说明 控制(端点0) 必须 传输USB描述符、类请求代码以及供查询的消息数据等 中断输入 必须 传输从设备到主机的输入数据 中断输出 可选

16.8K61
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SSH与内置USB HID支持的完美结合

    本文将深入探讨SSH的内置USB HID支持及其对用户和管理员的益处。 USB HID简介 USB HID是指通过USB接口连接的人机接口设备,例如键盘、鼠标和安全密钥。...在安全领域,USB HID设备通常用于存储和处理身份验证信息,如数字签名和加密密钥。 SSH的内置USB HID支持 SSH协议内置的USB HID支持允许用户使用USB安全密钥进行身份验证。...跨平台性: 无论是Windows、Linux还是macOS,SSH的内置USB HID支持都能够提供稳定、可靠的身份验证服务。...总结 SSH的内置USB HID支持为用户和管理员提供了一个简单、安全的身份验证解决方案。...随着安全需求的不断增加,利用SSH和USB HID技术的身份验证方案将会得到更广泛的应用。

    57530

    信创系统支持 USB HID 设备的两种方案

    方案一:应用程序适配 HID 设备 在 Linux 下,要支持 HID 设备的开发,推荐使用如下几个库: 1. hidapi 简介:跨平台的 HID 接口库,支持 Linux、Windows、macOS...2. libusb 简介:通用 USB 访问库,HID 是 USB 设备的一类。...特点: 可以访问 HID 以及非 HID USB 设备; 更底层,需要自己解析 HID 报告; 更灵活,可以实现特定控制请求。...Wine 是一个让 Windows 应用程序在 Linux 上运行的兼容层,也支持 HID 设备。 Wine通过一个多层架构将Windows的HID设备API调用转换到Linux的HID设备。...在Linux上,winebus通过 udev 和 hidraw 接口检测USB HID设备: 使用libudev监控 /dev/hidraw(原始HID设备)和 /dev/input/event(Linux

    31810

    linux usb端点

    一系列相互独立的端点在一起构成了USB逻辑设备,在系统结构中,位于下方红色方框内: 二、端点的分类 每个USB设备都有一个唯一的设备地址,设备地址是设备连接上主机时由主机分配的,主机主要依靠这个设备地址对...USB设备进行访问。...五、端点与管道 1、管道的概念 管道是主机软件(数据缓存区),和USB设备各各端点之间的数据传输连接,他是两者之间通信流的抽象(实际上数据传输是USB总线接口完成)。...1)、“流”指不具有USB定义格式的数据流,流通道中的数据是流的形式,也就是该数据内容不具有USB要求的结构。...2)、“消息”指具有某种USB定义格式的数据流。消息通道与端点的关系同流通道与端点的关系是不同的。

    12.4K31

    IOT安全 :HID

    如今,使用USB设备进行攻击的案例也屡见不鲜。本文将介绍常见的利用USB设备进行钓鱼攻击的手段。...--- 什么是HID攻击 HID 全称为 Human Interface Device,直译为人类接口设备,也被称为人体学输入设备,是指与人类直接交互的计算机设备,而pc端上的”HID”一般指的是USB-HID...而HID攻击就是攻击者将USB设备模拟成为键盘,让电脑识别成为键盘,再进行脚本模拟按键进行攻击。...Badusb也属于HID攻击的一种,在badusb之前还有两种HID攻击,分别是USB RUBBER DUCKY(usb橡皮鸭)和Teensy....HID攻击需配合社会工程学才能进行攻击,因此除了设备上的防护能力要增强,个人的安全意识也需要增强。 --- 本文作者 r0fus0d

    2K11

    原创 Paper | USB设备开发:从入门到实践指南(一)

    系统的USB gadget驱动,有需要的可以自行查看该部分的源码,位于Linux内核的:linux/drivers/usb/dwc2和linux/drivers/usb/gadget目录下。...18所示: 图18:Linux源码中关于bInterfaceProtocol值的宏定义 2.1.4 端点描述符 端点描述符的结构体定义为于:linux/include/uapi/linux/usb/ch9...2.1.6 HID报告描述符 当USB主机通过接口描述符得知USB设备是USB HID设备时,将会再获取HID报告描述符,在USBPcap中捕获到的HID报告描述符如图21所示: 图21:Wireshark...报告描述符来源于Linux内核示例,如图22所示: 图22:Linux USB HID gadget 驱动文档 所以下一步我们需要能顺利阅读HID报告描述符,可以参考官方文档,官方文档的优点是内容齐全,...通过修改接口描述符字段和HID报告描述符字段,来模拟一个鼠标。 研究一下手柄,讲道理手柄也是使用HID协议,但是Linux的代码里没看到相关定义。 研究非HID协议,比如U盘,网卡,打印机这些。

    3.2K00

    原创 Paper | USB设备开发:从入门到实践指南(三)

    nintendo_hid_devices[] = { { HID_USB_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_PROCON...HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_JOYCONL) }, { HID_BLUETOOTH_DEVICE...原装的左右手柄,使用的是HID_BLUETOOTH_DEVICE宏定义,表示匹配的是蓝牙HID协议,并不匹配USB HID协议。...从上面的内容可以知道,如果想要开发Linux下的Switch Pro手柄的客户端,只需要操作eventX文件,并且仔细阅读nintendo_hid_event函数,了解传输数据的数据结构就能实现。...Linux驱动中还未实现,从joydev_event可以看出,Linux的手柄驱动仅支持坐标系和按键功能,所以把支持加速度传感器的手柄给禁用了。

    52810

    原创 Paper | USB设备开发:从入门到实践指南(二)

    所有环节准备就绪了(这次USB主机设备选择的是Linux主机),接下来就可以运行脚本,然后可以在Linux主机上看到以下信息: $ sudo dmesg [91788.951749] usb 3-2:...并且在Linux的源码中发现Swithc手柄的相关驱动:drivers/hid/hid-nintendo.c。 综合上述因素,选择了Switch手柄作为研究的切入点,但最终却发现选错了切入点。...3 hid_nintendo,usbhid,hid_generic 发现ubuntu成功适配到了hid_nintendo驱动,但是却报了一堆的错误,猜测是这些错误导致手柄驱动注册失败,在Linux下能被正常识别的手柄应该像上面的案例一样...另外因为测试使用的Linux是装在Windows上的虚拟机,vmware在Windows上安装了一个USB驱动,来让主机接入虚拟机当中的,可能是同样的BUG导致在Linux系统上也无法正常识别到手柄相关驱动...4 本篇总结 参考资 通过本篇文章,我们了解了如何模拟一个USB鼠标,USB游戏手柄设备,并且可以学习如何对Linux内核中的HID驱动进行修改然后输出相关调试信息。

    77910

    BadUSB的前世今生:USB RUBBER DUCKY和Teensy USB

    USB RUBBER DUCKY和Teensy都可用于实施HID模拟攻击,其中USB RUBBER DUCKY入手简单,傻瓜式操作,但价格不菲啊;而Teensy USB性价比比较高,也可用来制作各种酷炫的...这就是为什么会有一个无处不在的USB标准HID或人机接口设备(Human Interface Device)。任何一个宣称是键盘HID的设备都能够被大多数操作系统自动的探测和接入。...Freebuf小科普 HID(Human Interface Device)人机接口设备类别是Windows最早支持的USB类别。...不管是Windows、Linux、Mac还是Android(当然是不算触摸屏了),各个系统平台所遵守的USB标准都是一致的。所以USB RUBBER DUCKY自然而然就具有了跨平台的特点。...主要特点: ①可以变身为任意类型的设备 ②AVR处理器,16 MHz ③单按钮编程 ④易于使用的Teensy Loader应用程序 ⑤免费软件开发工具 ⑥兼容Mac OS X,Linux和Windows

    4.3K100

    如何用Wireshark捕获USB数据?

    本文中,我们将向大家介绍怎样通过wireshark捕获usb数据,使用的环境如下: l Wireshark 2.0.1(SVN)l Linux kernel 4.1.6 你也可以用其他版本的wireshark...USB有不同的规格,以下是使用USB的三种方式: l USB UART l USB HID l USB Memory UART或者Universal Asynchronous Receiver/Transmitter...其中使用的最广的不是USB HID 就是USB Memory了。 每一个USB设备(尤其是HID或者Memory)都有一个供应商ID(Vendor Id)和产品识别码(Product Id)。...如下图: 上图是连接在我电脑上的USB设备列表,通过lsusb查看命令。 例如说,我有一个无线鼠标Logitech。它是属于HID设备。...我们需要给用户足够的权限来获取linux中的usb数据流。我们可以用udev来达到我们的目的。我们需要创建一个用户组usbmon,然后把我们的账户添加到这个组中。

    3.6K70

    20.Linux-USB鼠标驱动

    在上一章分析完USB总线驱动程序后, 接下来开始写一个USB驱动: 本节目的: 将USB鼠标的左键当作L按键,将USB鼠标的右键当作S按键,中键当作回车按键 参考/drivers/hid/usbhid/...,sc,pr); USB_INTERFACE_INFO()设置usb_driver驱动的id_table成员 cl:接口类,我们USB鼠标为HID类,所以填入0X03,也就是USB_INTERFACE_CLASS_HID...linux/slab.h> #include linux/module.h> #include linux/init.h> #include linux/usb/input.h> #include...linux/hid.h> static struct input_dev *myusb_mouse_dev; //input_dev static char *myusb_mouse_buf...(full HID) support //hid:人机交互的USB驱动,比如鼠标,键盘等 然后make uImage 编译内核 将新的触摸屏驱动模块放入nfs文件系统目录中 5.2然后烧写内核,装载触摸屏驱动模块

    10.3K81

    如何使用usbsas安全地读取不受信任的USB大容量存储设备

    该工具基于Rust语言开发,并且支持在GNU/Linux上运行。 功能介绍 1、从不受信任的USB设备读取文件(不使用uas、USB_storage和文件系统等内核模块)。...usbsas-analyzer-server $ cargo build --release -p usbsas-tools $ cargo build --release --manifest-path=usbsas-hid.../hid-user/Cargo.toml $ cargo build --release --manifest-path=usbsas-hid/hid-dealer/Cargo.toml 工具使用...内核模式 usbsas最大的一个优势就是在用户空间中运行,因此Linux内核不能有usb_storage和uas模块。...在未设置CONFIG_USB_STORAGE和CONFIG_ USB_UAS的情况下编译内核,或者至少阻止加载此模块,因为如果存在,它们将在插入USB设备时自动加载: $ cat

    2.2K20
    领券