网站运营
位置:首页>> 网站运营>> 如何在Linux下设置录音笔时间

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

作者:依云  发布时间:2021-11-10 22:24:54 

标签:Linux,录音笔时间

买了一个录音笔,效果比使用笔记本话筒录音好多了还省电。当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(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个包,大部分还都是重复的。很快就定位到关键位置了:

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

一个 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('<HBBBBB', dt.year, dt.month, dt.day,
     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()
0
投稿

猜你喜欢

  • 北京时间10月13日早间消息,据国外媒体今日报道,美国黑客乔治&middot;霍兹(George Hotz)发布了一款名为Black
  • 大多数WordPress用户都知道该怎么从数千个WordPress主题里挑出自己喜欢,但要自己开发新主题恐怕不是人人都能胜任得了的。用户们可
  • 世界上没有绝对安全的系统,即使是普遍认为稳定的Linux系统,在管理和安全方面也存在不足之处。我们期望让系统尽量在承担低风险的情况下工作,这
  • 在你购买一个托管计划后,你需要登陆到你的Account Manager来完成帐户设置。第一. 登陆你的Account Manager.第二.
  • 现在很多的朋友都用SERV-U做个人FTP的服务器,有关如何使用SERV-U架设服务器的文章很多了,这儿我就不多说了。不过大家不知道注意到了
  • 提到FTP服务器,可能大家都会想到Serv-U、vs-FTP等软件,其实微软内置在IIS里的FTP服务已经够用,不信请往下看。实现对多用户的
  • 百度指数(index.baidu.com)是百度搜索推出的一个用于分析关键词热度的工具,对站长的SEO策划非常有帮助。网趣在线将从各个方面挖
  • 在WIN下安装APACHE配置虚拟目录和UNIN下基本是一样的就是修改httpd.conf1:单个IP对应单个玉米例如:www.phpuni
  • 广告颜色是广告优化中一个富有创造性的要素。 Google AdSense 帐户中不仅提供了调色板供您选择,您还可以自定义广告颜色。广告颜色的
  • 到底什么是搜索引擎优化写作?搜索引擎优化文案指的是战略性地利用和部署的搜索关键词或有利可图的关键字的网站的浏览文字和其他内容。这包括标题,描
  • 利用了 bash 和 lftp 的自动登录功能 lftp 支持 ftp ssh 等多种登录协议 #!/bin/bash echo "
  • Easy CGI在1998年成立于美国纽约,专业提供Windows平台的虚拟主机,与Microsoft有良好的合作关系,算是Windows主
  • 中文分词又叫中文切词,中文划词等,是seo必须掌握的一个基础知识。现有的中文分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方
  • 有用户问Godaddy怎么把iTunes RSS重新定位到另一位置呢?现在我们就来解决这一问题。如果你想把某个RSS feed重新定位到另外
  • 10月26日消息,网易企业邮箱近日悄然更新了客户端收信图标提示、通讯录导入优化等多项新功能。网易企业邮箱自问世以来,秉承网易邮箱长久以来的以
  • 今天来介绍Godaddy主机用户如何在共享托管帐户上创建新增FTP用户。那Godaddy主机用户为什么需要在共享托管帐户上新增FTP用户?有
  • 这几天很多朋友的站都不同程度的快照回档,有的甚至直接被k的一页都不剩了,包括我自己的小站114美女也不能幸免,于是咨询了很多业内知名人士,总
  • ServU plus2.0ServU plus2.0是Serv-U的一个插件,其主要功能就是捕捉Serv-U的事件,然后做适当的功能增强、扩
  • 最近探讨flash在客户端的得失,与几位朋友交流时,突然想起,前段时间阿里集团旗下几个公司相继做出在业内反响比较大的几个招聘网站,不约而同都
  • 我的师父黄裳@岳旭强曾经说过,“好的架构图充满美感”,一个架构好不好,从审美的角度就能看得出来。后来我看了很多系统的架构,发现这个言论基本成
手机版 网站运营 asp之家 www.aspxhome.com