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

10
有没有一种方法可以通过USB查询系统的日期/时间,而无需在主机计算机上安装任何东西(可能只需驱动程序)?

原始问题的背景

为了避免XY问题,让我解释一下我要做什么。

为了能够计算2FA的TOTP令牌(例如Google Authenticator应用程序所做的那样),你需要一个实时时钟来获取日期和时间。

有一个名为SC4-HSM的USB设备,我想使用它来计算令牌,但是它没有时钟,并且根据设计师的说法,添加一个会太昂贵了(需要电池等)。

原始问题的可能解决方案

这个设备将与已经具有RTC的计算机一起使用。因此,我想到了查询系统日期/时间的想法。

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

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

浏览了 设备类代码列表(互联网档案馆)后,没有任何需要日期/时间的内容引起我的注意。 我能想到的最接近的是:

我浏览了USB实现者论坛的设备类文档,但里面没有任何与日期或时间相关的内容。

当前问题

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

我现在正在查阅USB开发文档,例如Michael Opdenacker的Linux USB驱动程序课程,我尝试了Linux USB项目,但它似乎已经停止更新。我略读了Windows NT驱动程序开发,只是为了获得一个思路,但我仍然无法弄清楚这是否可行,以及有多难。

我完全是个新手,也许这超出了我的能力水平,但我想找出是否需要奇怪的黑科技或解决方法,还是有更为直接的方法来解决问题?

似乎很少有关于这个问题的信息,或者我只是在搜索错误的地方。

对于解决原始问题或当前问题,有任何想法或指针吗?


最后你最终需要做什么?我想要建立一个通知系统,最好是可以插入USB并从主机请求时间戳。 - Ryan
1
我有点遇到了瓶颈。经过广泛的搜索,不幸的是似乎没有其他方法可以做到这一点,除非安装某种脚本或驱动程序,但在我的情况下这违背了我想要做的事情的初衷,所以我需要去寻找另一条路。 - Acapulco
1个回答

2
系统时间不一定是普通时间,即从NTP服务器获取的“原子”时间。
最明显的解决方案是使用自动运行,这在Linux上也是可能的,但通常自动运行被阻止,因此用户必须明确激活它。

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实现了哪些USB类,如果它实现了CDC ACM(虚拟COM端口),则很容易实现:无法通过USB将计算机时间与Arduino同步(类似于echo "T$(($(date +%s)+60*60*$TZ_adjust))" >/dev/tty.usbmodemfa131)。也许可以通过USB驱动程序访问系统时间,我现在不确定。

是的,那确实是设计师建议的。在主机上使用一个小脚本将时间发送到设备上。这可能可行,但我想知道是否还有其他可能的方法。顺便说一句,你提出了一个很好的观点,即系统时间不是“NTP时间”。因此,很可能脚本是答案。 - Acapulco
1
有关脚本解决方案,请参见http://askubuntu.com/questions/284224/autorun-a-script-after-i-plugged-or-unplugged-a-usb-device。如果HSM设备没有实现虚拟串口(我认为就是这种情况),则您可以使用*libusb*将数据发送到SC4-HSM的一个端点(异步传输,...),或者在Windows上您可能需要编写驱动程序,因为从Win8开始,libusb不再适用于Windows。 - ralf htp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接