买了一个录音笔,效果比使用笔记本话筒录音好多了还省电。当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(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','07','00']

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

dt = datetime.datetime.now()

data = struct.pack('

_,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','cc','0b','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下设置录音笔时间全部内容,希望文章能够帮你解决如何在Linux下设置录音笔时间所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

录音 linux 监听,如何在Linux下设置录音笔时间相关推荐

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

    如何在Linux下设置录音笔时间 发布时间:2020-09-15 05:05:35 来源:脚本之家 阅读:92 作者:依云 栏目:服务器 买了一个录音笔,效果比使用笔记本话筒录音好多了还省电.当然啦, ...

  2. linux 监听数据包,linux下网络监听与发送数据包的方法(即libpcap、libnet两种类库的使用方法)...

    linux下可以用libpcap函数库实现监听数据包,使用libnet 函数库发送数据包 安装: 在命令行下apt-get install 就可以了 libpcap的使用: /*author hjj ...

  3. linux监听端口丢失,linux – 如果没有监听端口,则为Systemd重启服务

    我建议你采用不同的方法,并使用专用的监控工具来实现这一目标. 我最喜欢的监控工具,允许重新启动服务,以防它们崩溃,或者不再在其配置的端口上监听,这是monit:https://packages.deb ...

  4. linux监听apache代码,linux系统使用python监控apache服务器进程脚本分享

    这篇文章主要介绍了linux系统使用python监控apache服务器进程的脚本,大家参考使用吧 crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bi ...

  5. Oracle Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口

    一.Linux下Oracle数据库常用命令 oracle用户下执行: $ sqlplus system/manager @ file.sql 执行sql脚本文件 $ sqlplus system/ma ...

  6. linux查询数据库oracle端口,Oracle数据库常用命令、Linux监听配置、oracle linux下开放1521端口...

    Oracle数据库常用命令.Linux监听配置.oracle linux下开放1521端口 时间:2020-02-14 来源: 一.Linux下Oracle数据库常用命令 oracle用户下执行: $ ...

  7. oracle 启动 linux监听,Linux下启动Oracle服务和监听程序

    $ su – oracle $ sqlplus / nolog sql> conn / as sysdba sql> startup                 #启动Oracle,需 ...

  8. 开启1521端口监听_Oracle数据库常用命令、Linux监听配置、Oracle linux下开放1521端口...

    一.Linux下Oracle数据库常用命令 Oracle用户下执行: $ sqlplus system/manager @ file.sql 执行sql脚本文件 $ sqlplus system/ma ...

  9. linux 网站访问密码,Linux入门教程:如何在nginx下实现访问web网站密码认证保护的功能,nginxweb以便拒绝那些不速之客...

    Linux入门教程:如何在nginx下实现访问web网站密码认证保护的功能,nginxweb以便拒绝那些不速之客 在某些特定的环境下,我们希望nginx下的web站点在访问时需要用户输入账户密码才能访 ...

最新文章

  1. Fundamental Research:根系分泌物通过调控土壤微生物影响碳周转的机理
  2. 推荐Web前端初学者应该知道的书籍和网站
  3. 《每日一题》62. Unique Paths 不同路径
  4. 树-当前结点与列表页不符的处理
  5. db2界面调用存储过程_第三章 操作系统用户界面
  6. 任晶磊:如何看待程序员在 GitHub 发起抗议互联网公司实行 996 工作制网站?
  7. Android权限详解
  8. 使用Log4j进行日志操作
  9. 解决vue2+vue-cli3项目ie兼容问题
  10. WebService开发常用功能详解
  11. 隐藏在SWT、Swing、AWT背后的故事
  12. 傻瓜进销存怎么样?收费吗?
  13. matlab全局变量和局部变量和子函数
  14. 基于ZigBee的远程温度监测系统.
  15. oracle用exp定时备份数据库,oracle exp备份数据库
  16. 奇点云数据中台技术汇(七) | 数据智能模型——数据中台航母的作战集群
  17. 2018 NOIP 提高组 复赛 day2
  18. IT人的职业素养与规划:程序开发 软件设计 职场心得 职业素养 职业规划
  19. 移动硬盘插入电脑不显示的解决办法
  20. C/C++中浮点数格式学习——以IEEE75432位单精度为例

热门文章

  1. PCIe VPD (Vital Product Data) 介绍
  2. 什么是云计算?如何进行云计算安全知多少?
  3. 应广PFS122单片机比较器测供电电源VDD电压
  4. 云模型(Cloud Model)
  5. 计算机毕业设计Java小区生活服务平台的设计与实现(源码+系统+mysql数据库+Lw文档)
  6. 前端三件套(二):CSS
  7. 【异常处理】 - airflow python报 ImportError: cannot import name ‘resolve_types‘异常问题分析和处理方案
  8. 算法导论11--最小生成树电网长度问题
  9. Python网络编程之二:网络编程基础
  10. ArcGis中的超链接