V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rv54ntjwfm3ug8
V2EX  ›  程序员

有什么能自动通过 HTTPS 连接从权威来源获取当前准确时间转为 NTP 协议的开源服务端吗?或者程序在没有 UAC 权限的情况有办法修改 Windows 时间吗?

  •  
  •   rv54ntjwfm3ug8 · 2022-03-21 01:01:05 +08:00 · 1927 次点击
    这是一个创建于 996 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天发现全部网站的两步验证都过不了,检测后发现防火墙 DROP 了全部 UDP 外网出站请求(内网不影响,我无法操作这个防火墙)导致 Windows 时间无法同步,电脑时间已经偏差 2 分钟了,于是自己花 3 分钟时间糊(上 StackOverflow 抄了两段代码拼起来)了一个通过 HTTPS 获取网络时间来更新的程序,发现没有 UAC 权限无法更新 Windows 时间。试了下在 UI 手动改系统时间不需要 UAC 权限呀。如果为此把它做成服务 /计划任务(开启 UAC 的情况下要求 UAC 的程序不能作为普通自启项)感觉攻击面增加了。程序在没有 UAC 权限的情况有办法修改 Windows 时间吗?

    18 条回复    2022-03-23 07:36:50 +08:00
    cz5424
        1
    cz5424  
       2022-03-21 01:19:24 +08:00 via iPhone
    人工修改不需要 uac 的话,模拟鼠标就可以了
    i0error
        2
    i0error  
       2022-03-21 01:27:05 +08:00 via Android
    但是模拟鼠标会不会需要 uac 。。。
    rv54ntjwfm3ug8
        3
    rv54ntjwfm3ug8  
    OP
       2022-03-21 01:28:46 +08:00 via iPhone
    @cz5424 那就做不到无感同步了
    ysc3839
        4
    ysc3839  
       2022-03-21 02:13:38 +08:00
    > 在 UI 手动改系统时间不需要 UAC 权限

    是需要的,这是 UAC 没有开到最高档,白名单直接授权了,在这种情况下有一大堆方法可以提权,做成服务不会增加攻击面。
    另外根据微软员工在博客里的说法,UAC 不是安全特性。
    https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
    https://web.archive.org/web/20190315174844/https://devblogs.microsoft.com/oldnewthing/20160816-00/?p=94105
    https://web.archive.org/web/20111216020913/http://channel9.msdn.com/Forums/Coffeehouse/473037-UAC-controversy-the-last-episode/773c9d79f8df4fa8bc489deb00e05c3d
    mingl0280
        5
    mingl0280  
       2022-03-21 04:03:37 +08:00 via Android
    你可以在内网开个虚拟机,装啥系统随你……然后把内网的时间服务器指定为这台虚拟机。你的虚拟机就随便怎么草 https 服务了吧……
    Tabjy
        6
    Tabjy  
       2022-03-21 05:00:37 +08:00
    @mingl0280 思路不错 但是在本地跑一个后端是 HTTP 同步的 NTP 服务器貌似更省事
    msg7086
        7
    msg7086  
       2022-03-21 06:04:39 +08:00
    https://github.com/twekkel/htpdate 你是重写了这个轮子吗。
    yin1999
        8
    yin1999  
       2022-03-21 06:41:04 +08:00 via Android
    试试内网网关是否自带 NTP 服务器,如果有且时间相对正确的话,可以用那个
    datocp
        9
    datocp  
       2022-03-21 06:41:27 +08:00 via Android
    用 openwrt 网关就没这些事了。
    直接 dnsmasq 指定 time.windows.com 为网关 ip 。网关做为 ntp 服务器。
    Services.msc 不知道哪个服务用.cmd 重新启动一下,也有同步时间的效果,适合那些主板电池没电的电脑。
    其它应该有个 net time 命令,通过其它电脑进行同步。
    Tink
        10
    Tink  
       2022-03-21 08:50:15 +08:00 via Android
    我觉得你有这功夫,不如在本地起一个 ntp 服务
    rv54ntjwfm3ug8
        11
    rv54ntjwfm3ug8  
    OP
       2022-03-21 12:04:33 +08:00
    我的想法就是这个,帖子标题第一句就写了,问题是有没有现成的轮子?不想重复造。
    @mingl0280
    @Tabjy
    @Tink
    aru
        12
    aru  
       2022-03-21 12:41:45 +08:00
    @theklf4
    ntp + htpdate 就可以了
    3dwelcome
        13
    3dwelcome  
       2022-03-21 12:48:12 +08:00
    就是发一个 NTP 协议的 UDP 包,给 windows 。

    让 windows 能知道当前的时间,算是很容易的一件事情吧。

    平均也就 30 行代码,估计大家都懒得造轮子了。
    3dwelcome
        14
    3dwelcome  
       2022-03-21 12:52:34 +08:00
    不对,我发现添加自定义 time ntp 服务器,还是需要先申请 UAC 权限。

    而楼主的最大问题,就是没有 UAC 权限。那直接进入死循环了。

    干脆用代码申请提权吧,修改本地时间又不是见不得人的事情,要求 UAC 权限一点不过分。
    ragnaroks
        15
    ragnaroks  
       2022-03-21 13:37:03 +08:00
    windows 上自用的话,用 dotnet 起个 worker 模板,写完了直接安装到服务里面。

    这玩意我以前也搞过,找个你认为准确的 http 目标,发一个 head 请求,响应里面就有 GMT 时间,除了被 httpclient 坑了一道以外前后不超过 10 分钟撸完
    ragnaroks
        16
    ragnaroks  
       2022-03-21 13:39:27 +08:00
    补充:应用程序如果以 LocalSystem 用户运行是不需要经过 UAC 允许的
    mmdsun
        17
    mmdsun  
       2022-03-21 20:13:59 +08:00 via iPhone
    用计划任务启动就不需要 UAC 了,微软留的。貌似也不打算修复了
    mingl0280
        18
    mingl0280  
       2022-03-23 07:36:50 +08:00 via Android
    @theklf4 啥方案都不用,WinServer 自带……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3028 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:54 · PVG 19:54 · LAX 03:54 · JFK 06:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.