ntp-zeitabfrage?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

ich glaube, dass ich mal wieder eure hilfe in anspruch nehmen muesste. :)

ich wollte mir ein kleines programm schreiben, das mir meine systemzeit mit einem zeitserver abgleicht. das wird ja ueber ntp gemacht. wie kann ich nun in python das ntp-protokoll nutzen?

so ging es jedenfalls leider nicht:
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(("ptbtime1.ptb.de", 123))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in connect
socket.error: (10061, 'Connection refused')
hat da eventuell jemand eine idee?
ich freue mich ueber jede hilfe, die ich kriegen kann!

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

ach, UDP... natuerlich! *PATSCH*, vielen dank!
gut, und was muss ich nun zum server senden, um die aktuelle zeit zu bekommen?

ich weiss, dass das jetzt nicht mehr wirklich mit python zu tun hat, aber ich frage trotzdem mal.

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

roschi hat geschrieben:gut, und was muss ich nun zum server senden, um die aktuelle zeit zu bekommen?
Wie wärs wenn du dir mal den RFC 958 anschaust?
lunar

http://de.wikipedia.org/wiki/Network_Time_Protocol

Da sind die entsprechenden RFCs verlinkt.

Wenn du aber lediglich auf einfache Weise eine hochgenaue Uhr abfragen möchtest, und nicht an NTP gebunden bist, dann wäre wohl "mx.DateTime.NIST" was für dich. Das fragt die Atomuhren des NIST ab. Die kannst du sogar einfach ohne externes Modul abfragen, da das Protokoll absolut simpel ist. Such mal bei Google danach ;)
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

ja, das ist gut.
ich hab mir den RFC schon angeschaut. allerdings fand ich in ihm nicht die richtige syntax zum abfragen der zeit. ich weiss nicht, ob ich es ueberlesenhabe, oder einfach meine nicht so guten englischkenntnisse der grund sind. das format, in dem die zeit dann zurueckgegeben wird, habe ich zwar verstanden, weiss aber immer noch nicht, was ich nun senden soll.

ich wuerde mich echt freuen, wenn mir da jemand helfen kann.

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

kaschu
User
Beiträge: 25
Registriert: Sonntag 25. Februar 2007, 14:15

roschi hat geschrieben:ich wuerde mich echt freuen, wenn mir da jemand helfen kann.
schon mal bei activestate vorbeigeschaut? http://code.activestate.com/recipes/117211/
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Ich habe das mal im Web gefunden. Ich weiß leider nicht mehr wo.

Code: Alles auswählen

from urllib import urlopen
from time import time
from os import system

def ask_time( url, tzn, tz2=None ):
  """Get time from the Internet.
  # url must be e.g. http://tycho.usno.navy.mil/cgi-bin/timer.pl :-)
  # tzn must be UTC,EST,PST,etc.
  #     UTC will return time like "22:30:40 UT"
  #     Other options return like "05:30:40 PM" i.e. with AM/PM
  # tz2 can be another time zone, e.g. EDT,PDT,etc.
  #Returns "HH:MM:SS AA" or empty string if any failure.
  """
  try:
    doc = urlopen( url ).readlines()
    #<TITLE>What time is it?</TITLE>
    #<H2> US Naval Observatory Master Clock Time</H2> <H3>
    #<BR>Apr. 30, 20:01:28 UTC
    #<BR>Apr. 30, 04:01:28 PM EDT
    #....
    for line in doc:
      line = line.strip()
      if line.endswith( tzn ) or (tz2 and line.endswith( tz2 )):
        col = line.index(':')
        return line[col-2:col+9] # 04:01:28 PM (or 22:30:40 UT)
  except:
    pass
  return ''

def synch_time( url, tz, tz2=None ):
  time_str = ask_time( url, tz, tz2 )
  if time_str:
    try:
      before = time()
      system( 'time ' + time_str ) # do synchronize!
      delta = time() - before
      return "Time is %s\nCorrected by %.1f sec" % (time_str,delta)
    except:
      pass
  return 'Not synchronized'

if __name__ == "__main__":
  from win32ui import MessageBox
  rc = synch_time( "http://tycho.usno.navy.mil/cgi-bin/timer.pl", "EST", "EDT" )
  MessageBox( rc, "synch_time" )

# EOF
MfG
HWK
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

super!

vielen dank!
es funktioniert jetzt einwandfrei.

ich habe nun folgendes gebastelt:
http://paste.pocoo.org/show/83933/

ihr wart mir mal wieder - wie schon so oft - eine grosse hilfe.
und nochmal: vielen dank !

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Antworten