首页 > 解决方案 > C++ 从 Internet 获取 localtime/gmtime 以获得许可

问题描述

是否有当前实现从互联网而不是从机器获取本地时间,因为在机器上时间可以被用户篡改?当我运行下面的代码时,它显示了我:

#include <iostream>
#include <iomanip>
#include <ctime>

int main()
{
    std::time_t t = std::time(nullptr);
    std::cout << "UTC:   " << std::put_time(std::gmtime(&t), "%c %Z") << '\n';
    std::cout << "local: " << std::put_time(std::localtime(&t), "%c %Z") << '\n';
}

输出:

UTC:   Mon Sep 16 09:56:10 2019 GMT
local: Mon Sep 16 11:56:10 2019 CEST

但是,当我在 Ubuntu 18.04 机器上更改时间时,这两个函数的时间输出也会发生变化。用例是将它用于许可,因为像licensepp这样的 repos 只使用普通的gmtime,它具有简单的解决方法,只需更改机器的时间以超过到期日期。

是否有一个功能可以使用互联网在不使用机器时间的情况下获得与上述类似的输出?任何链接,代码片段表示赞赏。谢谢。

标签: c++

解决方案


当然可以编写一个以当前时间响应请求的服务器。也可以编写一个通过网络发送此类请求的客户端。

但是,C++ 没有用于网络通信的标准 API。所以,第一步要弄清楚你的目标是什么系统,然后查阅系统关于网络通信的文档。

一个警告是网络通信引入了延迟,这将导致响应稍微过时。适用于所有通信的其他注意事项是服务器停机时间和其他连接问题的可能性。

请注意,存在用于时钟同步的 Internet 协议:NTP。并且有可以查询的公开可用的服务器。对于您的问题,这可能是一个不错的捷径。请务必阅读并遵守他们的服务条款,尤其是当您将其用于商业目的时。


推荐阅读