प्रॉक्सी के पीछे ntpdate का उपयोग कैसे करें?


49

क्या प्रमाणीकरण के साथ HTTP प्रॉक्सी के पीछे ntpdate का उपयोग करना संभव है? यदि यह संभव नहीं है, तो क्या कोई अच्छा विकल्प है?


क्या ओएस कृपया?
१:09:०६ पर केकोट्रायु

मेरे मामले में लिनक्स (मत सोचो, हालांकि यह बहुत मायने रखता है)।
टन वैन डेन हेउवेल

यह केवल इसलिए मायने रखता था क्योंकि विंडोज के लिए दूर से कुछ भी खोजना कठिन था। आपके द्वारा खोजे जाने की स्थिति में मेरे द्वारा उपयोग की जाने वाली कुंजी खोज "HTTP पर NTP" थी।
केकोट्रायु 19

3
यदि आप एक HTTP प्रॉक्सी के पीछे हैं, तो इसका मतलब है कि आप किसी कंपनी में हैं, और यह कंपनी स्वयं की NTP सेवाएं प्रदान कर सकती है।
ट्रिस्टन

जवाबों:


29

यह 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.

मुझे नहीं लगता कि मैंने कभी सूडो आह्वान के तर्क के रूप में इंटरनेट से असमान डेटा का उपयोग करने के लिए कई सिफारिशें देखी हैं।

गिथब: https://github.com/ioerror/tlsdate


1
यह उत्तर वास्तव में शीर्ष पर होना चाहिए।
पाई डेलपोर्ट

मैंने इसे प्राप्त करने का प्रबंधन नहीं किया - हर संयोजन के साथ यह गलत टिकर के बारे में त्रुटियों को छापता है। नीचे दिया गया उत्तर काम करता है।
हाय-एंजेल

यह एक Centos6.9 मशीन पर काम कर रहे हैं, लेकिन कोई खुशी नहीं है। यह अन्य सिफारिशों की तुलना में अधिक स्वस्थ लगता है, लेकिन यह काम करने के लिए तुच्छ नहीं है ...
अल्फ्रावो

46

कार्वोन द्वारा उत्तर पर विस्तार :

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

कैवियट, यह वर्तमान निर्देशिका में फ़ाइल 'index.html *' बनाएगा।
रेयनस

ध्यान दें कि लघु संस्करण www.google.com का उपयोग करना चाहिए क्योंकि google.com इसे 301 के माध्यम से पुनर्निर्देशित कर रहा है अब दिनांक "अटक"
हंसी

जब मैंने टिप्पणी की तो उस आदेश के लिए प्रतिक्रिया चार दिनों की तारीख से बाहर हो गई।
हांसी

@ryenus यह एक महान जवाब है। यह पूरी तरह से ठीक काम करता है। हालाँकि मुझे एक समस्या है जब मैंने इस कमांड को एक क्रॉस्टैब जॉब में रखा। जब भी यह नौकरी चलती है तो तिथि का समय भाग 00:00:00 कर दिया जाता है। मैंने एक शेल स्क्रिप्ट में चलने की कोशिश की। एक ही परिणाम।
होजेफे

@ हज़ेफ़े, क्या आप जाँच करेंगे कि क्या प्रॉक्सी कर्ल के काम से गुजर रहा है ?
रेनस

21

एक लाइन

मान लिया गया है कि पर्यावरण चर पहले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'

    कैशिंग को स्पष्ट रूप से अक्षम करने के लिए , खासकर जब क्रोन जॉब में और / या प्रॉक्सी सर्वर के पीछे इस्तेमाल किया जाए।

आरएचईएल 6 के साथ वैकल्पिक रूप का परीक्षण किया गया जो आउटपुट में "जेड" को जोड़ने के बजाय '-यू' विकल्प का उपयोग करता है:

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

BTW, google.comको प्राथमिकता दी जाती है www.google.com, क्योंकि पूर्व परिणाम एक 301पुनर्निर्देशित प्रतिक्रिया में होता है, जो बहुत छोटा होता है ( 569बनाम 20k+वर्ण) लेकिन फिर भी उपयोग करने के लिए अच्छा होता है।


sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
रेनस

^ ऊपर wgetसंस्करण है, हालांकि मैं व्यक्तिगत रूप से उपयोग करना पसंद करता हूं curl
रेनस

2
इंटरनेट से असमान डेटा पास करना एक सुडो आह्वान के चर के रूप में? क्या यह 1999 है?
dfc

2
या बस tlsdate का उपयोग करें और इस तरह के गंदा कीचड़ पर भरोसा न करें।
dfc

हाँ, यह परदे के पीछे काम करता है। मैंने प्रश्न भी पढ़ा।
dfc

5

यदि यह विशुद्ध रूप से एक HTTP प्रॉक्सी है, तो यह पोर्ट 80 का उपयोग कर रहा है, इसलिए मूल उत्तर विशेष रूप से नहीं है। NTP, UDP पोर्ट 123 का उपयोग करता है। यदि यह अधिक सामान्य प्रॉक्सी सर्वर है, तो सभी बंदरगाहों की सेवा ले सकता है।

वहाँ कुछ प्रोग्राम हैं जो HTTP पर NTP करते हैं। मैं लिनक्स का उपयोग नहीं करता, लेकिन यह एक ऐसा कर सकता है:

http://www.rkeene.org/oss/htp/ (अभी भी यकीन नहीं है कि यह प्रमाणीकरण भी करेगा)।

मुझे विंडोज के लिए एक नहीं मिला, लेकिन अगर मैं करता हूं तो मैं वापस पोस्ट करूंगा।


फिर से लिनक्स के लिए, इसलिए मैं एक लिंक के अलावा बहुत कुछ नहीं जोड़ सकता : mina86.com/2010/01/16/ntp-over-http वहाँ भी कुछ हो सकता है कि इनमें से एक प्रकाशित: nist.gov/pml/div688-grp40/ softwarelist.cfm
KCotreau

HTTP लिंक पर NTP प्रेरणादायक है, इसके लिए धन्यवाद!
टन वैन डेन हेवुएल

5

Http प्रॉक्सी सर्वर के पीछे लोगों के लिए एक त्वरित और गंदा समाधान:

मेरा स्थान GMT + 4 है, मैं टाइमप्ले सर्वर से url http://www.timeapi.org/utc/in+four+hours के साथ वर्तमान समय की जांच कर सकता हूं , अधिक जानकारी के लिए pls अपने स्थान के लिए वेबसाइट देखें।

मेरे द्वारा की गई दिनांक और समय को सेट करने के लिए:

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

आप कमांड को दोहरा सकते हैं यदि प्रारंभिक 'समय' कमांड उच्च मूल्य की रिपोर्ट करता है ...


टिप के लिए धन्यवाद, मुझे यह और भी आसान लगा: sudo date -s "$(curl -s http://www.timeapi.org/utc/now)"यदि आपके ओएस को सही तरीके से सेट किया गया है, तो आपको टाइमज़ोन पर ध्यान देने की आवश्यकता नहीं है। लिनक्स स्ट्रिंग में दिए गए टाइमज़ोन को पहचानता है और सिस्टम समय को उचित रूप से सेट करता है।
मेलेबियस

2

NTP सेवा समय को सिंक करने के लिए UDP प्रोटोकॉल का उपयोग कर रही है। इसलिए इसके लिए HTTP / TCP प्रॉक्सी काम नहीं कर सकता है। स्वीकृत उत्तर के लिए वैकल्पिक, प्रॉक्सी के पीछे समय को सिंक करने के लिए एक अच्छा htpdate टूल है।

एक क्रॉन नौकरी उदाहरण:

* 3 * * * /usr/bin/htpdate -s -P <PROXY_HOST>:<PROXY__PORT> www.linux.org www.freebsd.org

2

हालांकि http पर ntp का उल्लेख किया गया है, मुझे आश्चर्य है कि किसी ने भी निफ्टी की थोड़ी उपयोगिता का उल्लेख नहीं किया है जो http://www.vervest.org/lp/htpdate पर उपलब्ध है । विकल्पों के विपरीत, डेबियन और उबंटू के डिफ़ॉल्ट रिपोजिटरी का हिस्सा है और इसका उपयोग करके स्थापित किया जा सकता है ।htpdateapt-get

यह एक साधारण आदेश के रूप में या चुपचाप डेमन मोड में दोनों चलाया जा सकता है।


ऊपर मेरे जवाब की जाँच करें।
Artificerpi

1

http_proxyपर्यावरण चर मान लिया गया है:

wget -S --spider "http://www.google.com/" 2>&1 | grep -E '^[[:space:]]*[dD]ate:' | sed 's/^[[:space:]]*[dD]ate:[[:space:]]*//'

या उपयोग करें curl -I --proxy="..." "http://www.google.com/"

आखिरकार, अगर Google की साइट पर अपना समय निर्धारित नहीं है, तो कोई उम्मीद नहीं है।


1

Https://superuser.com/a/509620/362156 पर विस्तार करना

मान लेते हैं कि आप बर्लिन (जर्मनी) में हैं।

तो इस का उपयोग करें:

sudo TZ=Europe/Berlin date -s "$(TZ=Europe/Berlin date --date='TZ="UTC" '"$(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 , $6, $4 }' | sed 's/,//')")"

आपको यह स्पष्ट करना चाहिए कि पंद्रह_ जी के उत्तर की तुलना में आपके समाधान में क्या अलग है।
पाबौक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.