如何在代理后面使用 ntpdate?

Ton*_*vel 55 proxy ntp ntpdate

是否可以在带有身份验证的 HTTP 代理后面使用 ntpdate?如果不可能,有什么好的选择吗?

小智 54

扩展carveone 的答案

sudo date -s "$(wget -S  "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//' | head -1l | awk '{print $1, $3, $2,  $5 ,"GMT", $4 }' | sed 's/,//')"
Run Code Online (Sandbox Code Playgroud)


dfc*_*dfc 32

这似乎是 tlsdate 的一个明显案例。

 tlsdate: secure parasitic rdate replacement

  tlsdate sets the local clock by securely connecting with TLS to remote
  servers and extracting the remote time out of the secure handshake. Unlike
  ntpdate, tlsdate uses TCP, for instance connecting to a remote HTTPS or TLS
  enabled service, and provides some protection against adversaries that try
  to feed you malicious time information.
Run Code Online (Sandbox Code Playgroud)

我认为我从未见过这么多使用来自互联网的未经消毒的数据作为 sudo 调用的论据的建议。

Github:https : //github.com/ioerror/tlsdate


rye*_*nus 22

一个班轮

假设环境变量http_proxy已设置

sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
Run Code Online (Sandbox Code Playgroud)

我们可以先验证检索到的日期/时间:

# local  date/time
date -d "$(curl -HCache-Control:no-cache -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"

# or UTC date/time
date -ud "$(curl -HCache-Control:no-cache -sI google.com | grep '^Date:' | cut -d' ' -f3-6)"    
Run Code Online (Sandbox Code Playgroud)

笔记

以防万一,可能需要某些选项curl

  • curl -x $proxy

    显式设置要使用的代理服务器,当http_proxy没有设置环境变量时,默认为协议http和端口1080手动)。

  • curl -H 'Cache-Control: no-cache'

    显式禁用缓存,尤其是在 cron 作业和/或代理服务器后面使用时。

使用 RHEL 6 测试的替代形式,使用“-u”选项来代替“Z”到输出:

sudo date -u --set="$(curl -H 'Cache-Control: no-cache' -sD - http://google.com |grep '^Date:' |cut -d' ' -f3-6)"
Run Code Online (Sandbox Code Playgroud)

顺便说一句,google.com优于www.google.com,因为前者会导致301重定向响应,后者要小得多(56920k+字符相比)但仍然很好用。

  • 将未经处理的数据从互联网作为变量传递给 sudo 调用?是1999年吗? (2认同)
  • 或者只是使用 tlsdate 而不是依赖像这样令人讨厌的杂物。 (2认同)

art*_*rpi 7

NTP 服务使用 UDP 协议来同步时间。所以 HTTP/TCP 代理可能不适合它。替代接受的答案,有一个很好的htpdate工具可以同步代理后面的时间。

一个 cron 作业示例:

* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org
Run Code Online (Sandbox Code Playgroud)


KCo*_*eau 5

如果它纯粹是一个 HTTP 代理,则它使用端口 80,因此基本答案是否定的。NTP 使用 UDP 端口 123。如果它是一个更通用的代理服务器,为所有端口提供服务,那么也许可以。

有一些程序可以通过 HTTP 执行 NTP。我不使用 Linux,但这个可能会这样做:

http://www.rkeene.org/oss/htp/(仍然不确定这是否会进行身份验证)。

我找不到一个适用于 Windows 的,但如果我找到了,我会回帖。


小智 5

对于 http 代理服务器背后的人来说,这是一个快速而肮脏的解决方案:

我的位置是 GMT+4,我可以通过 url http://www.timeapi.org/utc/in+four+hours从 timeapi 服务器查看当前时间,有关更多信息,请查看您所在位置的网站。

要设置日期和时间,我会这样做:

time sudo date $(wget -O - "http://www.timeapi.org/utc/in+four+hours" 2>/dev/null | sed s/[-T:+]/\ /g | awk '{print $2,$3,$4,$5,".",$6}' | tr -d " " )
Run Code Online (Sandbox Code Playgroud)

如果初始“时间”命令报告的值很高,您可以重复该命令...