如何在代理后面使用 ntpdate?

如何在代理后面使用 ntpdate?

是否可以在经过身份验证的 HTTP 代理后面使用 ntpdate? 如果不可能,有什么好的替代方案吗?

答案1

这似乎是 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.

我认为我从未见过如此多的建议使用来自互联网的未清理数据作为 sudo 调用的参数。

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

答案2

扩展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/,//')"

答案3

一句话

假设环境变量http_proxy已经设定

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

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

# 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)"    

笔记

为了以防万一,可能需要某些选项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)"

顺便说一句,google.com比 更受欢迎www.google.com,因为前者会导致301重定向响应,这要小得多(569相对于20k+字符而言)但仍然可以使用。

答案4

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

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

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

我找不到适用于 Windows 的版本,但如果找到了,我会回复。

相关内容