如何在Linux下设置录音笔时间

发布时间:2020-09-15 05:05:35

来源:脚本之家

阅读:92

作者:依云

栏目:服务器

买了一个录音笔,效果比使用笔记本话筒录音好多了还省电。当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(Android 就是这么不靠谱)。

我的录音需要记录较为准确的时间信息。录音笔怎么知道现在是什么时间呢?还好它没有跟风,用不着联网!

它带了一个小程序,叫「录音笔专用时间同步工具」(英文叫「SetUDiskTime」,可以搜到的)。是一个 EXE 文件,以及一个 DLL 文件。功能很棒,没有广告,没有推荐,也不需要注册什么乱七八糟的账户,甚至都不需要打开浏览器访问人家官网。就弹一个框,显示当前时间,确定一下就设置好时间了。这年头,这么单纯的 Windows 软件还真是难得呢。

然而,它不支持我用的 Linux 啊。虽然我努力地保证这录音笔一直有电,但是时间还是丢失了几次,它的FAT文件系统也脏了几次。每次我都得开 WinXP 虚拟机来设置时间,好麻烦。

Wine 是不行的,硬件相关的东西基本上没戏。拿 Procmon 跟踪了一下,也没什么复杂的操作,主要部分就几个 DeviceIoControl 调用,但是看不到调用参数。试了试 IDA,基本看不懂……不过倒是能知道,它通过 IOCTL_SCSI_PASSTHROUGH 直接给设备发送了 SCSI 命令。

既然跟踪不到,试试抓 USB 的包好了。本来想用 Wireshark 的,但是 WinXP 版的 Wireshark 看来不支持。又尝试了设备分配给 VBox 然后在 Linux 上抓包,结果 permission denied……我是 root 啊都被 deny 了……

那么,还是在 Windows 上抓包吧。有一个软件叫 USBPcap,下载安装最新版,结果遇到 bug。那试试旧版本吧。官网没给出旧版本的下载地址,不过看到下载链接带上了版本号,这就好办了。去 commit log 里找到旧的版本号替换进去,https://dl.bintray.com/desowin/USBPcap/USBPcapSetup-1.0.0.7.exe,就好了~

抓好包,取到 Linux 下扔给 Wireshark 解读。挺小的呢,不到50个包,大部分还都是重复的。很快就定位到关键位置了:

一个 0xcc 命令发过去,设备回复「ACTIONSUSBD」,大概是让设备做好准备。然后一个 0xb0 命令,带上7字节数据发过去,时间就设置好了。简单明了,不像那些小米空气净化器之类的所谓「物联网」,通讯加密起来不让人好好使用。

那么,这7字节是怎么传递时间数据的呢?我首先检查了UNIX时间戳,对不上。后来发送这个字串看上去挺像YYYYMMDDHHMMSS格式的,只是明显不是当时的时间。啊,它是十六进制的嘛!心算了几个,符合!再拿出我的 Python 牌计算器,确定年份是小端序的16位整数。

好了,协议细节都弄清楚了,接下来是实现。我原以为我得写个 C 程序,调几个 ioctl 的,后来网友说有个 sg3_utils 包。甚好,直接拿来用 Python 调,省得研究那几个 ioctl 要怎么写。

#!/usr/bin/env python3

import os

import sys

import struct

import subprocess

import datetime

def set_time(dev):

cmd = ['sg_raw', '-s', '7', dev, 'b0', '00', '00', '00', '00', '00',

'00', '07', '00', '00', '00', '00']

p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)

dt = datetime.datetime.now()

data = struct.pack('

dt.hour, dt.minute, dt.second)

_, stderr = p.communicate(data)

ret = p.wait()

if ret != 0:

raise subprocess.CalledProcessError(ret, cmd, stderr=stderr)

def actionsusbd(dev):

cmd = ['sg_raw', '-r', '11', dev, 'cc', '00', '00', '00', '00', '00',

'00', '0b', '00', '00', '00', '00']

subprocess.run(cmd, check=True, stderr=subprocess.PIPE)

def main():

if len(sys.argv) != 2:

sys.exit('usage: setudisktime DEV')

dev = sys.argv[1]

if not os.access(dev, os.R_OK | os.W_OK):

sys.exit(f'insufficient permission for {dev}')

actionsusbd(dev)

set_time(dev)

if __name__ == '__main__':

main()

录音笔生成文件自动传到服务器,如何在Linux下设置录音笔时间相关推荐

  1. 录音 linux 监听,如何在Linux下设置录音笔时间

    买了一个录音笔,效果比使用笔记本话筒录音好多了还省电.当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(Android 就是这么不靠谱). 我的录音需要记录较为准确的时间信息.录音笔怎么知道 ...

  2. linux 修改文件夹和子文件夹权限,Linux下设置文件夹以及子文件夹中所有文件权限...

    0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解: 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01 方法 设置文件夹及子文件夹下所有文件的读.写.可执行权限: [root@ ...

  3. linux中目录文件用ls显示是绿色的,linux 下设置 ls 命令 显示 文件、文件夹颜色...

    用 dircolors -p  可以 看到缺省的颜色设置,包括各种颜色和"粗体",下划线,闪烁等定义. 而变量 $LS_COLORS  是设置颜色的变量: 如我的设置如下: exp ...

  4. web文件怎么传到服务器,web文件传到服务器

    web文件传到服务器 内容精选 换一换 工具中所有涉及上传文件功能的,如果需要上传的文件大于1GB或者解压后超过剩余磁盘空间的一半,则需要释放磁盘空间或手动将文件上传至服务器,其他情况可通过Web界面 ...

  5. asp.net ftp上传文件到服务器,.net 文件上传到服务器上

    详解 Linux 下 SSH 远程文件传输命令 scp 3.将本地文件上传到服务器上 scp-P 2222/home/lnmp0.4.tar.gz root@www.vpser.net:/root/l ...

  6. 文件上传打满服务器带宽,文件上传云服务器 带宽选择

    文件上传云服务器 带宽选择 内容精选 换一换 弹性云服务器支持通过内网访问OBS,OBS可供用户存储任意类型的数据.将图片.视频等数据存储至OBS后,在ECS上可以访问OBS,下载桶中的图片或视频等数 ...

  7. 拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...

    WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议,它的主要功能就是在本地与远程计算机间安全的复制文件.与使用FTP上传代码相比,通过WinSCP可以直接使 ...

  8. 文档上传到服务器上,将文件上传到服务器上

    将文件上传到服务器上 内容精选 换一换 为了实现NAT Server.SAP HANA主备节点和SAP S/4HANA主备节点互相通过SSH协议跳转的功能,需要配置云服务器之间的互信.在本地PC上,生 ...

  9. html网页上传到服务器_JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao.service.servlet 这 ...

最新文章

  1. JVM NativeMemoryTracking 分析堆外内存泄露
  2. [转]linux 块设备驱动
  3. 安装和配置SQL Server 2016 With SP1
  4. Chrome开发者工具network标签页里的transferred over network和resources loaded by the page的区别
  5. 的driver_Spark源码解析(三)----Driver启动、注册Application
  6. 计算分数加减表达式的值(信息学奥赛一本通-T1079)
  7. 利用Power Designer反向数据库结构
  8. ArcGIS修改默认文件地理数据库
  9. 蒙特卡洛算法与电脑围棋
  10. opencv读取视频转换成一张张图片
  11. 十分钟学会如何用Python处理CSV文件
  12. SUSE收购Rancher Labs,云原生时代大幕拉开
  13. 独家 | 放弃Jupyter Notebooks吧,教你如何用仪表板展示研究成果
  14. MacOS 下 TeXstudio 深色背景主题设置
  15. HTML登录注册页面简单实现
  16. C#中的EXCEL的查找操作
  17. 计算机网络(第8版)谢希仁第一章概述笔记
  18. 基于yolov4作者最新力作yolov7目标检测模型实现火点烟雾检测
  19. 普林斯顿微积分读本篇十八:复数
  20. 信捷PLC与昆仑触摸屏5轴示教程序

热门文章

  1. WebRTC Native M96 回调音频裸数据IAudioFrameObserver--采集和播放语音混音后的数据(onMixedAudioFrame)
  2. 「Photoshop2021入门教程」创建A4尺寸打印文档
  3. Java语言-概念-Swing概述
  4. ADV-213-求存款
  5. Chrome BookMark_back(2011-2-25)
  6. 你不知道的箭头函数???
  7. 机器学习贝叶斯-垃圾邮件识别
  8. Linux配置分布式数据/mysql集群 ndb_mgmd 实验报错摘录
  9. WORD类型简析 C语言
  10. 这篇文章会让你熟悉文件的各种操作,让你对文件的认识更加深入【c语言】