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

news/2024/11/27 23:00:19/文章来源:https://www.cnblogs.com/wsg1100/p/18568542

目录
  • 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_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.hqwc.cn/news/842543.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024御网杯信息安全大赛个人赛wp_2024-11-27

MISC题解 题目附件以及工具链接: 通过网盘分享的文件:御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 --来自百度网盘超级会员v1的分享一.信息安全大赛的通知 Ctrl+A发现存在隐写:选中中间空白那一部分,把文字变成红色,得出flag二、编码…

设计模式--原型模式及其编程思想

原型模式(Prototype Pattern) 原型模式的核心思想是通过复制(克隆)现有对象来创建新对象。 原型模式通常涉及两个角色:原型对象和具体原型对象。原型对象是需要被复制的对象,而具体原型对象是实现了克隆方法的原型对象。 在Java中,原型模式通常通过实现Cloneable接口和重…

JS-DOM与BOM

DOM DOM(Document Object Model) 文档对象模型是W3C组织制定并推荐的标准, 这个标准提供了一系列操作HTML的统一API(Application Programming Interface) 核心对象是document 浏览器的工作流程浏览器读取HTML文件 在内存中生成DOM树 调用API渲染显示DOM树 DOM树 是将HTML文档映…

C语言中对文件的输入输出

在c中的文件操作 通过读的形式,打开文件用FILE打开 用FILE*类型的指针接受文件指针的首地址 并且我们可以用读或写的方式打开文件 使用r来读取文件当然也要判断是否读取文件成功,若读取成功fopen会传出指针,若失败则会传出空指针,所以要判断读取是否成功 当然,当文件不存在…

linux内核参数

1.查看所有内核参数 grubby --info=ALL2.查看内核参数应没应用,生没生效 cat /proc/cmdline3. /etc/default/grub 里 GRUB_CMDLINE_LINUX 的值

『模拟赛』NOIP2024加赛8

『模拟赛记录』NOIP2024加赛8Rank 唐A. flandre 签。 比较显然,由于 \(k\ge 0\),所以最终的序列一定为不降序列。首先将原序列升序排序,当任取一个子序列时,容易发现最后一个数越大一定越优,那么最后一个数取到最大值时,倒数第二个数一定越大越优,以此类推,最终取出的序…

manim边做边学--圆柱体

Cylinder是Manim中用于创建圆柱体对象的类。 Cylinder类在制作数学、物理或工程领域的动画时,可用于以下的场景中:演示几何概念:使用Cylinder类创建圆柱体,并通过改变其参数和方法来演示圆柱体的各种几何性质,如体积、表面积等。 模拟物理现象:使用Cylinder类来模拟圆柱体…

基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现十一

运行环境:windows/Linux均可、jdk1.8、mysql5.7、redis3.0、idea/eclipse均可。 技术点:SpringBoot+SpringDataJPA+Mysql+Freemaker+Bootstrap+JS+CSS+HTML 部分功能:前台竞价商品信息控制器Controller(商品列表、商品详情、报名、拍价、查看报名记录等 )一、前言介绍: 免…

Docker 实战:搭建本地 Registry 私有镜像仓库及批量导入脚本

前言:在我之前的博客中,我分享了 Harbor 仓库搭建的详细操作步骤。然而,在实际的生产环境中,并非每个 Docker 环境都需要部署一个规模庞大的 Harbor 仓库。有时,一个轻量级的本地 Registry 私有镜像仓库会更为便捷。本文将介绍如何搭建一个本地 Registry 私有镜像仓库,并…

Chrome联合Opera/Vivaldi/Waterfox等成立联盟对抗Microsoft Edge

日前在欧盟有个新的行业联盟成立,这个行业联盟名为浏览器选择联盟,主要成员包括 Google Chrome、Opera、Vivaldi、Waterfox 和 Wavebox。 成立联盟的主要目的是对抗微软的 Microsoft Edge 浏览器,该联盟致力于呼吁 / 游说欧盟将 MicROSoft Edge 按照数字市场法案列为看门人…

MySQL原理简介—12.MySQL主从同步

大纲 1.异步复制为MySQL搭建一套主从复制架构 2.半同步复制为MySQL搭建一套主从复制架构 3.GTID为MySQL搭建一套主从复制架构 4.并行复制降低主从同步延迟或强制读主库1.异步复制为MySQL搭建一套主从复制架构 (1)MySQL主从复制的原理 (2)搭建主从复制架构的配置(1)MySQL主从复制…

java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)

java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)@目录说明:基础工具类MsgPageResultResponseBusinessDomainEnum(枚举)EsDocumentConstants(常量)本人其他文章链接 说明:基础工具类Msg package com.geespace.microservices.data.computing.model.…