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.rhkb.cn/news/479683.html

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

相关文章

【C++】vector的使用

1. vector的构造 (constrator)构造函数声明 接口说明 vector(); (重点) 无参构造 vector (const vector& x); &#xff08;重点&#xff09; 拷贝构造 vector (InputIterator first, InputIterator last); 使用迭代器区间进行初始化构造 vector (size_type n, co…

Easy Excel 通过【自定义批注拦截器】实现导出的【批注】功能

目录 Easy Excel 通过 【自定义批注拦截器】实现导出的【批注】功能需求原型&#xff1a;相关数据&#xff1a;要导出的对象字段postman 格式导出对象VO 自定义批注拦截器业务代码&#xff1a; 拦截器代码解释&#xff1a;详细解释&#xff1a;格式优化&#xff1a; Easy Excel…

Qt/C++基于重力模拟的像素点水平堆叠效果

本文将深入解析一个基于 Qt/C 的像素点模拟程序。程序通过 重力作用&#xff0c;将随机分布的像素点下落并水平堆叠&#xff0c;同时支持窗口动态拉伸后重新计算像素点分布。 程序功能概述 随机生成像素点&#xff1a;程序在初始化时随机生成一定数量的像素点&#xff0c;每个…

矩阵重构——sortrows函数

s o r t r o w s sortrows sortrows函数依据某列的属性对其元素所在的行进行排序从而进行矩阵的排序 s o r t r o w s sortrows sortrows函数常用方法&#xff1a; 1. 1. 1. s o r t r o w s ( a , [ c 1 , c 2 ] ) sortrows(a,[c_1,c_2]) sortrows(a,[c1​,c2​])&#xff0c…

Linux之网络基础

网络发展 网络的发展可以从人与人之间的工作模式开始谈起, 人与人的工作模式反应了机器与机器的工作模式: 1. 独立模式: 在网络发展的早期计算机间处于独立模式, 计算机之间相互独立 最开始计算机之间是独立运行的, 数据之间的交互需要人用软盘等存储介质拷贝过去, 一般涉及…

【pyspark学习从入门到精通22】机器学习库_5

训练-验证分割 TrainValidationSplit 模型为了选择最佳模型&#xff0c;会对输入数据集&#xff08;训练数据集&#xff09;进行随机分割&#xff0c;分成两个子集&#xff1a;较小的训练子集和验证子集。分割只执行一次。 在这个例子中&#xff0c;我们还将使用 ChiSqSelect…

【Petri网导论学习笔记】Petri网导论入门学习(十一) —— 3.3 变迁发生序列与Petri网语言

目录 3.3 变迁发生序列与Petri网语言定义 3.4定义 3.5定义 3.6定理 3.5例 3.9定义 3.7例 3.10定理 3.6定理 3.7 有界Petri网泵引理推论 3.5定义 3.9定理 3.8定义 3.10定义 3.11定义 3.12定理 3.93.3 变迁发生序列与Petri网语言 对于 Petri 网进行分析的另一种方法是考察网系统…

IDEA:配置Serializable class without ‘serialVersionUID’ 找不到

在使用Java原生序列化的时候&#xff0c;serialVersionUID起到了一个类似版本号的作用&#xff0c;在反序列化的时候判断serialVersionUID如果不相同&#xff0c;会抛出InvalidClassException。 File -> Settings -> Editor -> Inspections -> 搜索 Serialization …

win10 禁止更新

一、winR 输入 regedit 二、输入注册列表路径&#xff1a; &#xff08;1&#xff09;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings &#xff08;2&#xff09;按照格式&#xff0c;创建文件命名: FlightSettingsMaxPauseDays &#xff08;3&…

OpenAI Whisper 语音识别 模型部署及接口封装

环境配置: 一、安装依赖&#xff1a; pip install -U openai-whisper 或者&#xff0c;以下命令会从这个存储库拉取并安装最新的提交&#xff0c;以及其Python依赖项&#xff1a; pip install githttps://github.com/openai/whisper.git 二、安装ffmpeg&#xff1a; cd …

springboot视频网站系统的设计与实现(代码+数据库+LW)

摘 要 使用旧方法对视频信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在视频信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的视频网站系统管理员功…

安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2

本篇主要针对只使用过QT5的qmake&#xff0c;没有用过MSVC&#xff0c;VS的老同学。 建议一部分一部分安装&#xff0c;全部勾选安装遇到问题会中断&#xff0c;前功尽弃。 我自己需要的是QT5&#xff0c;编出的软件用在公司设备上。 QT6&#xff1a;建议也安装学习&#xf…

自动驾驶目标检测融合全貌

1、early fusion 早期融合&#xff0c;特点用到几何空间转换3d到2d或者2d到3d的转换&#xff0c;用像素找点云或者用点云找像素。 2、deep fusion 深度融合&#xff0c;也是特征级别融合&#xff0c;也叫多模态融合&#xff0c;如bevfusion范式 3、late fusion 晚融合&#x…

Microsoft Excel如何插入多行

1.打开要编辑的excel表&#xff0c;在指定位置&#xff0c;鼠标右键点击“插入”一行 2.按住shift键&#xff0c;鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键&#xff0c;往下拖动&#xff0c;直至到插入足够的行

node.js基础学习-http模块-创建HTTP服务器、客户端(一)

http模块式Node.js内置的模块&#xff0c;用于创建和管理HTTP服务器。Node.js使用JavaScript实现&#xff0c;因此性能更好。 使用http模块创建服务器&#xff0c;我们建议使用commonjs模块规范&#xff0c;因为很多第三方的组件都使用了这种规范。当然es6写法也支持。 下面就是…

2024御网杯信息安全大赛个人赛wp(misc方向)

目录 一.信息安全大赛的通知二、编码转换1. 第一部分2. 第二部分3. 第三部分 三、1.txt四、buletooth 题目附件以及工具链接&#xff1a; 通过网盘分享的文件&#xff1a;御网杯附件 链接: https://pan.baidu.com/s/1LNA6Xz6eZodSV0Io9jGSZg 提取码: jay1 –来自百度网盘超级会…

浅谈pdfbox2.0和pdfbox3.0的运用与区别

前言 Apache PDFBox 是一个开源的Java库&#xff0c;可以用来对PDF文档做一些基本操作&#xff0c;比如实际应用中的pdf读取、写入、合并、拆分、写文字、写图片、加水印等&#xff0c;甚至还应用到了电子签章。本文逐个介绍对pdf的操作&#xff0c;以备作为后续参考使用。 一…

《解锁计算机专业宝藏:核心编程语言与学习资料全解析》

在当今数字化浪潮汹涌澎湃、技术迭代日新月异的时代&#xff0c;计算机专业宛如一座蕴藏无尽宝藏与无限机遇的神秘殿堂&#x1f3f0;。对于莘莘学子而言&#xff0c;精准掌握核心编程语言&#xff0c;并手握优质学习资料&#xff0c;恰似寻得开启这扇殿堂大门的秘钥&#xff0c…

【计算机网络】多路转接之epoll

epoll也是一种linux中的多路转接方案(epoll也是只负责IO过程中的"等") 一、epoll相关接口的使用 1.epoll_create int epoll_create(int size); ​功能&#xff1a;创建一个epoll模型 ① int size&#xff1a;没意义了 >0就行 返回值&#xff1a;返回一个文件…

「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

本篇将带你实现一个简单的数字猜谜游戏。用户输入一个数字&#xff0c;应用会判断是否接近目标数字&#xff0c;并提供提示“高一点”或“低一点”&#xff0c;直到用户猜中目标数字。这个小游戏结合状态管理和用户交互&#xff0c;是一个入门级的互动应用示例。 关键词 UI互…