当前位置: 首页 > news >正文

linux模拟HID USB设备及wireshark USB抓包配置

文章目录

  • 1. 内核配置
  • 2. 设备配置
  • 附 wireshark USB抓包配置

linux下模拟USB HID设备的简单记录,其他USB设备类似。

1. 内核配置

内核启用USB Gadget,使用fs配置usb device信息。

Device Drivers  ---> [*]   USB support  ---><*>   USB Gadget Support  ---><*>   USB Gadget functions configurable through configfs [*]     HID function<*>   USB Gadget precomposed configurations (Function Filesystem)  ---> 

2. 设备配置

HID设备配置如下,需要将该shell函数添加到启动脚本中,其中的相关描述符配置自行根据USB 协议配置,然后调用该脚本。

usb_hid_device_config()
{if [ -d /sys/kernel/config/usb_gadget/ ] ; then######USB HID Device config######cd /sys/kernel/config/usb_gadget/mkdir -p isticktoitcd isticktoitecho 0x0483 > idVendorecho 0x5710 > idProduct # STM32echo 0x0215 > bcdDevice # v1.0.0echo 0x0200 > bcdUSB # USB2mkdir -p strings/0x409echo "xxxxxx" > strings/0x409/serialnumberecho "xxxxxx" > strings/0x409/manufacturerecho "xxxxxx" > strings/0x409/productmkdir -p configs/c.1/strings/0x409echo "HID_CONFIGUE" > configs/c.1/strings/0x409/configurationecho 2 > configs/c.1/MaxPower# Add functions heremkdir -p functions/hid.usb0echo 0 > functions/hid.usb0/protocolecho 0 > functions/hid.usb0/subclassecho 64 > functions/hid.usb0/report_length# Set HID in/out descecho -ne \\x05\\x81\\x09\\x82\\xa1\\x01\\x09\\x83\\x09\\x84\\x15\\x00\\x26\\xff\\x00\\x75\\x08\\x95\\x40\\x81\\x02\\x09\\x84\\x15\\x00\\x26\\xff\\x00\\x75\\x08\\x95\\x40\\x91\\x02\\xc0 > functions/hid.usb0/report_descln -s functions/hid.usb0 configs/c.1/# End functionsls /sys/class/udc > UDC######USB HID Device end######elseerrlog "usb_gadget not found!"return 1fi
}
  1. 示例demo
    usb设备节点为/dev/hidg0,以下为应用层USB收发示例;
/* hid_gadget_test */#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>#define BUF_LEN 512
struct options {const char    *opt;unsigned char val;
};#define __is_print(ch)                ((unsigned int)((ch) - ' ') < 127u - ' ')
#define HEXDUMP_WIDTH                 16void debug_hexdump(unsigned char *data, unsigned long size, unsigned char *headinfo)
{unsigned long i, j;unsigned long addr;printf("%s 0x%08X, size is %ld. The data is:\n", headinfo, addr,size);printf("Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n");for (i = 0; i < size; i += HEXDUMP_WIDTH){printf("[%08X] ", addr + i);/* dump hex */for (j = 0; j < HEXDUMP_WIDTH; j++){if (i + j < size){printf("%02X ", data[i + j]);}else{printf("   ");}}/* dump char for hex */for (j = 0; j < HEXDUMP_WIDTH; j++){if (i + j < size){printf("%c", __is_print(data[i + j]) ? data[i + j] : '.');}}printf("\n");}printf("\n");
}int main(int argc, const char *argv[])
{const char *filename = NULL;int fd = 0;char buf[BUF_LEN];int cmd_len;char report[64] = {0};int to_send = 8;int hold = 0;fd_set rfds;int retval, i;if (argc < 2) {fprintf(stderr, "Usage: %s devname\n",argv[0]);return 1;}filename = argv[1];if ((fd = open(filename, O_RDWR|O_DSYNC, 0666)) == -1) {perror(filename);return 3;}while (1) {FD_ZERO(&rfds);FD_SET(fd, &rfds);retval = select(fd + 1, &rfds, NULL, NULL, NULL);if (retval == -1 && errno == EINTR)continue;if (retval < 0) {perror("select()");return 4;}if (FD_ISSET(fd, &rfds)) {cmd_len = read(fd, buf, BUF_LEN - 1);
#ifdef HEX_DEBUGdebug_hexdump(buf, cmd_len, "recv report");
#endif}}close(fd);return 0;
}

附 wireshark USB抓包配置

安装wireshark 时同时安装USB抓包工具usbpcap后,打开wireshark有两个USB捕获接口

我们可以设置其中一个只抓取新接入的设备

  • USBPcap1 作用可指定抓取未接入的USB设备
  • USBPcap2 作用是抓取所有已接入的USB设备及新设备

配置后打开即可抓取新接入USB设备的所有USB包并解析。


http://www.mrgr.cn/news/78365.html

相关文章:

  • 系统思考—共同看见
  • 《精准掌控时间:C++ 人工智能开发中的运行时间监测之道》
  • 网络安全在现代企业中的重要作用
  • 从0开始学习Linux——搭建自己的专属Linux系统
  • 大工C语言作业答案
  • wordpress 中添加图片放大功能
  • Qt中QGraphics绘图类相关解释
  • Linux一篇通
  • 【TQ2440】02 串口连接进入u-boot
  • 【CSS in Depth 2 精译_061】9.4 CSS 中的模式库 + 9.5 本章小结
  • pta 题目(3)
  • 服务器记录所有用户docker操作,监控删除容器/镜像的人
  • 自动化运维(k8s)之微服务信息自动抓取:namespaceName、deploymentName等全解析
  • ComfyUI节点安装笔记
  • 数据结构--图
  • 【NLP 3、深度学习简介】
  • 1-深度学习干货总结(持续更新)
  • Matlab Simulink HDL Coder FPGA开发初体验—计数器
  • 表征对齐在训练DiT模型中的重要性
  • 【算法 python A*算法的实现】
  • 某j,mybatis-plus,多租户,多表关联查询 ,主表不追加租户条件bug解决
  • element ui select绑定的值是对象的属性时,显示异常.
  • SAP学习
  • Android 图形系统之一:概览
  • 【Zookeeper】三,Zookeeper的安装与基本操作
  • 《Learning Three.js》学习(1)使用Three.js创建三维场景