c - 通过 USB 获取系统日期/时间

标签 c date datetime usb hsm

有什么方法可以通过 USB 查询系统的日期/时间而无需在主机上安装任何东西(也许只是驱动程序)?


原问题的背景

避免the XY problem ,让我稍微解释一下我想做什么。

为了能够计算 2FA 的 TOTP token (例如像 Google Authenticator 应用那样),您需要一个实时时钟来获取日期和时间。

this USB device called SC4-HSM我想用它来计算 token ,但是它没有时钟,而且根据设计师的说法,添加一个会太贵(需要电池等)。

原始问题的可能解决方案

当然,此设备将与已经具有 RTC 的计算机一起使用。因此,我想到了查询系统的日期/时间来解决问题。

(注意:我知道 USB 设备可以连接到各种主机,并不是所有主机都有 RTC,但由于这只需要与计算机配合使用,我认为这不应该是一个问题)

我的第一个想法是可能有一些 USB 设备类需要日期/时间,所以我可以将设备注册为该类型,然后我就可以查询值。

通过 device class codes list (Internet Archive) 之后没有什么让我觉得需要日期/时间。我能想到的最接近的是:

我浏览了 device class documents in the USB Implementers Forum但其中没有任何内容与日期或时间有丝毫关联。

当前问题

由于 USB 规范似乎是一个死胡同,我认为也许有一种方法可以编写一个非常简单的 USB 驱动程序,当设备插入计算机时可以自动加载,然后我们可以使用该驱动程序在设备要求时返回日期/时间(除非我误解了什么)。

我现在正在查看 USB 开发文档,例如 Michael Opdenacker's Linux USB drivers course , 我试过 Linux USB Project这似乎死了。浏览 Driver Development for Windows NT只是想知道一个主意,但是我仍然无法弄清楚这是否可能,以及它有多难。

在这方面我是一个完全的初学者,也许这超出了我的技能水平,但我想弄清楚我是否需​​要奇怪的技巧和解决方法,或者是否有更直接的方法来做到这一点?

关于它的信息似乎很少,或者我只是在搜索错误的地方。

关于解决原始问题或当前问题的任何想法/指示?

最佳答案

系统时间不一定是一般时间,即您从 NTP 服务器获得的“原子”时间

最明显的解决方案是使用autorun,这在 linux 上也是可行的,但通常 autorun 被阻止,因此用户必须明确地激活它

https://askubuntu.com/questions/642511/how-to-autorun-files-and-scripts-in-ubuntu-when-inserting-a-usb-stick-like-autor

获取时间的 linux 命令是 datehwclock 或者如果计算机连接到网络,则可以联系 NTP 服务器(如果防火墙不阻止这个)

然后您的自动运行程序必须将数据发送到 SC4-HSM。如果 SC4-HSM 实现了 CDC ACM(虚拟 COM 端口),我不知道它实现了哪些 USB 类,这很简单: Unable to sync computer time to Arduino via USB

(类似于 echo "T$(($(date +%s)+60*60*$TZ_adjust))">/dev/tty.usbmodemfa131)

也许可以通过 USB 驱动程序访问系统时间,我现在还不知道

关于c - 通过 USB 获取系统日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40819579/

相关文章:

javascript - Struts 2 JQuery 日期选择器问题

c++ - 以下代码如何在 C/C++ 中编译?

c - 创建守护进程时打开描述符

c++ - VMS 时间戳到 POSIX time_t --- Boost.DateTime 错误?

python - Unix时差显示延迟

python datetime.now()不从包含文件的函数头返回更新的时间戳

c - 如何打印浮点值以供以后以完美的精度进行扫描?

MySQL日期格式转换 "Fri, 06 Nov 2015 04:06:05 -0500"

python - 获取本地时区的 Olson TZ 名称?

java - JAVA 中的格式化文本字段和日期时间