Cto-nk.ru

О Автосервисе доступно
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программа для синхронизации времени для Windows XP

Программа для синхронизации времени для Windows XP

У моего компьютера, который стоит на даче, в биосе села батарея, когда он не используется, он отключен от питания (выдернут из розетки), в связи с чем у него постоянно «слетает» дата и время, каждый раз его приходится настраивать.

На нем установлена Windows XP, эта операционная система, почему то не хочет автоматически настраивать время через Интернет (интернет на даче я сделал так: перейти к статье), после включения компьютера, и подключения его к WiFi, на котором уже есть интернет, стандартная утилита, не хочет синхронизировать время с сервером времени, я пробовал менять сервера, даже использовал сервер времени от Яндекса — https://time.yandex.ru, но это не дало результатов, время не устанавливалось.

синхронизация времени windows xp

В общем в итоге мне это надоело, и я решил поискать стороннюю программу для синхронизации времени, так как Windows XP это достаточно старая ОС, и она уже не поддерживается Майкрософтом, поиск таких программ затруднителен, поэтому я решил выложить ее в своем блоге. В общем нашел такую программу, она полностью заменяет собою часы в трее, но можно поставить в настройка «не изменять вид часов».

В первую очередь я включил русский интерфейс в этой программе (1), затем установил чек бок «не изменять вид часов» (2), часы в трее остались без изменений. Картинка снизу — меню настройки внешнего вида часов для Windows XP

программа синхронизации времени windows xp

Следующий скриншот, это второй раздел. В этом разделе, под цифрой (1) настраивается синхронизация времени, если зайти в раздел по кнопке (2), можно настроить автоматическую синхронизацию времени на компьютере под Windows XP

настройка синхронизации времени в виндовс XP

В кнопке «дополнительно», я выставил вот такие настройки.

синхронизируем время автоматически на windows xp

В программе еще есть будильники и говорящие часы, все это мне не нужно, поэтому я даже рассматривать это не стал.

Собственно теперь, при загрузке, компьютер сам настраивает время и дату. Замечу, что данные по часовому поясу, он берет из настроек Windows? следует так же убрать галочку с переводом на летнее/зимнее время, у меня на час больше с ней показывалось время.

настройка часового пояса

Кому требуется настроить на Windows XP автоматическую синхронизацию времени с интернет, выкладываю эту программу на Яндекс Диск

Синхронизировать время в javascript с хорошей точностью (> 0,5 с) (как NTP)

Я ищу способ синхронизировать время между клиентами с хорошей точностью (скажем, по крайней мере 0,5 секунды).

Я исключаю использование jsontime или метки времени в заголовках ответов сервера из-за низкой точности (секунда или, может быть, меньше).

ОБНОВЛЕНИЕ: он должен работать даже с мобильным подключением. Нередко (например, здесь, в Италии) соединения 3G имеют время прохождения туда и обратно около 0,5 с, поэтому алгоритм должен быть надежным.

2 ответа

Воспользуйтесь старой доброй схемой сообщений ICMP Timestamp. Это довольно просто реализовать на JavaScript и PHP.

Вот реализация этой схемы с использованием JavaScript и PHP:

Я не тестировал приведенный выше код, но он должен работать.

Читайте так же:
24355 клапан регулировки масла

Примечание. Следующий метод позволяет точно рассчитать разницу во времени между клиентом и сервером при условии, что фактическое время отправки и получения сообщений одинаковое или примерно одинаковое. Рассмотрим следующий сценарий:

  1. Как видите, часы клиента и сервера не синхронизированы на 2 единицы. Следовательно, когда клиент отправляет запрос отметки времени, он записывает исходное время как 0.
  2. Сервер получает запрос на 3 единицы позже, но записывает время приема как 5 единиц, потому что он на 2 единицы впереди.
  3. Затем он передает ответ с меткой времени на одну единицу позже и записывает время передачи как 6 единиц.
  4. Клиент получает ответ через 3 единицы (то есть через 9 единиц по данным сервера). Однако, поскольку он на 2 единицы отстает от сервера, он записывает возвращаемое время как 7 единиц.

Используя эти данные, мы можем рассчитать:

Как видно из вышесказанного, время отправки и получения рассчитывается неправильно в зависимости от того, насколько клиент и сервер не синхронизированы. Однако время приема-передачи всегда будет правильным, потому что мы сначала складываем две единицы (прием + оригинал), а затем вычитаем две единицы (возвращаем — передаваем).

Если мы предположим, что время в пути всегда составляет половину времени в оба конца (т.е. время передачи — это время приема, то мы можем легко вычислить разницу во времени следующим образом):

Как видите, мы точно рассчитали разницу во времени в 2 единицы. Уравнение для разницы во времени всегда sending — oneway время. Однако точность этого уравнения зависит от того, насколько точно вы рассчитываете время одностороннего движения. Если фактическое время отправки и получения сообщений не равно или примерно равно, вам нужно найти другой способ рассчитать время в один конец. Однако для ваших целей этого должно хватить.

Если вы просто хотите синхронизировать часы на нескольких компьютерах, сами NTP рекомендуют настроить свой собственный сервер времени .

Конечная точка сервера

Настройте конечную точку api на своем сервере, т.е.

Как это будет сделано, будет зависеть от используемого вами внутреннего языка.

Код клиента

Учитывая такую конечную точку, этот JS-фрагмент, который я собрал, будет

  1. Опрос конечной точки вашего сервера 10 раз.
  2. Попытайтесь компенсировать задержку, удалив половину времени приема-передачи.
  3. Сообщите среднее смещение между сервером и клиентом.

Вы можете использовать это вычисленное смещение (просто добавить его к местному времени), чтобы определить общее «универсальное» время из контекста каждого клиента.

Получение даты и времени от NTP сервера с помощью ESP8266 NodeMCU

Время от времени вы сталкиваетесь с идеей, в которой основным значением является время. Например, представьте реле, которое должно быть активировано в определенное время, или регистратор данных, который должен сохранять значения через определенные промежутки времени.

Первое, что приходит в голову, – это использовать микросхему RTC (часы реального времени). Но эти микросхемы не совсем точны, поэтому вам нужно снова и снова выполнять ручную подстройку, чтобы синхронизировать их с реальным временем.

Решение в этом случае – использовать протокол сетевого времени (NTP). Если у вашего проекта на ESP8266 есть доступ к Интернету, вы можете бесплатно получить дату и время (с точностью до нескольких миллисекунд от UTC). Дополнительное оборудование не требуется.

Читайте так же:
Международное воздушное право регулирует ответственность государств

Получение даты и времени от NTP сервера с помощью ESP8266 NodeMCU Получение даты и времени от NTP сервера с помощью ESP8266 NodeMCU

Что такое NTP?

NTP означает Network Time Protocol (протокол сетевого времени). Это стандартный интернет-протокол для синхронизации часов компьютера с неким эталоном в сети.

Данный протокол может использоваться для синхронизации всех сетевых устройств с всемирным координированным временем (UTC) с точностью до нескольких миллисекунд (50 миллисекунд в общедоступном Интернете и менее 5 миллисекунд в среде LAN).

Всемирное координированное время (UTC) – это всемирный стандарт времени, тесно связанный с GMT (средним временем по Гринвичу). UTC не меняется, оно одинаково во всем мире.

NTP устанавливает часы компьютеров в формате UTC, любое смещение местного часового пояса или смещение летнего времени применяется уже клиентом. Таким образом, клиенты могут синхронизироваться с серверами независимо от местоположения и разницы часовых поясов.

Архитектура NTP

NTP использует иерархическую архитектуру. Каждый уровень иерархии известен как слой (англ. stratum).

На самом верху находятся высокоточные устройства для измерения времени, известные как аппаратные часы уровня 0; это, например, атомные часы, GPS или радиочасы.

Серверы слоя 1 имеют прямое соединение с аппаратными часами слоя 0 и поэтому имеют наиболее точное время.

Рисунок 1 Иерархическая архитектура NTP со слоями Рисунок 1 – Иерархическая архитектура NTP со слоями

Каждый слой в иерархии синхронизируется с уровнем выше и действует как серверы для компьютеров нижнего слоя.

Как работает NTP?

NTP может работать разными способами. Наиболее распространенная конфигурация – работа в режиме клиент-сервер. Основной принцип работы следующий:

  1. клиентское устройство, такое как ESP8266, подключается к серверу с помощью протокола пользовательских датаграмм (UDP) через порт 123;
  2. затем клиент передает пакет запроса на сервер NTP;
  3. в ответ на этот запрос сервер NTP отправляет пакет с меткой времени;
  4. пакет с меткой времени содержит множество информации, такой как метка времени UNIX, точность, задержка или часовой пояс;
  5. затем клиент может проанализировать текущие значения даты и времени.

Подготовка IDE Arduino

Хватит теории, приступим к практике!

Но прежде чем углубляться в данное руководство, вы должны установить в вашу Arduino IDE дополнение для ESP8266. Чтобы подготовить Arduino IDE к работе с ESP8266 (если вы еще этого не сделали) следуйте инструкциям из статьи по ссылке ниже:

Установка библиотеки NTP-клиента

Самый простой способ получить дату и время с сервера NTP – это использовать клиент NTP из библиотек Arduino. Выполните следующие шаги, чтобы установить эту библиотеку в свою Arduino IDE.

Перейдите в раздел Скетч → Подключить библиотеку → Управлять библиотеками…. Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте результаты поиска, набрав «ntpclient». Должна остаться пара записей. Ищите NTPClient by Fabrice Weinberg. Щелкните на эту запись и выберите «Установить».

Рисунок 3 Установка библиотеки NTP-клиента в Arduino IDE Рисунок 3 – Установка библиотеки NTP-клиента в Arduino IDE

Получение текущих дня недели и времени от NTP-сервера

Следующий скетч даст вам полное представление о том, как получить текущие день недели и время с NTP-сервера.

Читайте так же:
Регулировка подачи топлива m51

Прежде чем вы отправитесь загружать скетч, вам нужно внести пару изменений, чтобы он у вас заработал.

  • Чтобы ESP8266 мог установить соединение с существующей сетью WiFi, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.
  • Вам необходимо настроить смещение UTC для вашего часового пояса в секундах. Смотрите список часовых поясов относительно UTC. Вот несколько примеров для разных часовых поясов:
    • для UTC -5.00: -5 * 60 * 60: -18000
    • для UTC +1.00: 1 * 60 * 60: 3600
    • для UTC +0.00: 0 * 60 * 60: 0

    Как только вы закончите, загрузите скетч в ESP8266.

    После загрузки скетча нажмите кнопку RST на вашей плате NodeMCU, и вы должны будете получать текущие день недели и время каждую секунду, как показано ниже.

    Рисунок 4 ESP8266 считывает день недели и время из ответа NTP-сервера и выводит их монитор последовательного порта Рисунок 4 – ESP8266 считывает день недели и время из ответа NTP-сервера и выводит их монитор последовательного порта

    Объяснение кода

    Давайте быстро взглянем на код, чтобы увидеть, как он работает. Сначала мы включаем библиотеки, необходимые для этого проекта.

    • NTPClient.h – это библиотека работы со временем, которая выполняет синхронизацию с NTP-сервером;
    • библиотека ESP8266WiFi.h предоставляет специальные методы для работы ESP8266 с WiFi, которые мы вызываем для подключения к сети;
    • библиотека WiFiUdp.h обрабатывает протокол UDP, например открытие порта UDP, отправку и получение пакетов UDP и т.д.

    Затем мы настраиваем несколько констант, таких как SSID, пароль WiFi и смещение UTC, о которых вы уже знаете. Мы также определяем двумерный массив daysOfTheWeek .

    Теперь, прежде чем инициализировать объект NTP-клиента, нам нужно указать адрес NTP-сервера, который мы хотим использовать. pool.ntp.org – это открытый проект NTP, отлично подходящий для подобных вещей.

    pool.ntp.org автоматически выбирает серверы времени, которые географически близки к вам. Но если вы хотите сделать выбор явно, используйте одну из подзон pool.ntp.org.

    ЗонаАдрес сервера
    Весь мирpool.ntp.org
    Азияasia.pool.ntp.org
    Европаeurope.pool.ntp.org
    Северная Америкаnorth-america.pool.ntp.org
    Океанияoceania.pool.ntp.org
    Южная Америкаsouth-america.pool.ntp.org

    В функции setup() мы сначала инициализируем последовательную связь с ПК и подключаемся к сети WiFi с помощью функции WiFi.begin() .

    Когда ESP8266 подключится к сети, мы инициализируем NTP-клиент с помощью функции begin() .

    Теперь мы можем просто вызывать функцию update() всякий раз, когда нам нужны текущие день недели и время. Эта функция передает пакет с запросом на NTP-сервер, используя протокол UDP, и преобразует полученный пакет с меткой времени в читаемый формат.

    Вы можете получить доступ к информации о дне и времени, воспользовавшись функциями библиотеки NTP-клиента.

    Настройка синхронизации времени между серверами.

    Для синхронизации внутренних часов серверов с внешним источником или между собой применяется протокол NTP.
    Для начала немного теории для понимания того, что мы делаем. И главное — зачем?

    Начнём с того, что время между серверами синхронизировать не просто можно, но и нужно. Практически в обязательном порядке. В том случае, если время на серверах (логических разделах) сильно разнится, то вы рискуете получить огромное количество проблем. И что самое забавное, не всегда источник этих проблем можно будет определить. Самый простой пример — Kerberos. В случае рассинхронизации времени между клиентом, сервером Kerberos, и сервером приложений, вполне вероятна ситуация, когда клиент не сможет получить сервис у сервера приложений. И это не смотря на то, что тикет с Kerberos сервера будет успешно получен. Почему? Да потому что, серверу приложений может показаться что тикет клиента устарел ещё пол-часа назад. А всё из-за разницы во времени. И это самый простой пример. Можно упомянуть и HACMP c delay timers. И стандартные системы аутентификации AIX (начиная с compat и заканчивая LDAP). И многое, многое другое… Будем считать, что в необходимости синхронизации времени мы вас убедили.

    Роли серверов:
    Сервер(server) – по запросу дает точное время клиентам. Роль могут брать на себя сервера различного уровня (stratum).
    Пир(peer) – берет время с сервера и по запросу может его отдавать. Обычно эта роль может применяться для серверов с уровнем 1 или 2.
    Клиент – компьютеры, которые получают время от серверов с низким уровнем(обычно 1 или 2), но никогда его не отдает.

    Несколько слов о безопасности NTP. NTP при работе использует UDP и TCP. Порт 123. Очень важно правильно настроить firewall в вашей сети. В противном случае вы рискуете нарваться на атаку «компрометация сервера времени». Что чревато отказом в обслуживании со стороны серверов приложений и серверов аутентификации. Да и внешний источник времени надо выбирать аккуратно. По тем же причинам.
    Для повышения уровня безопасности можно в конфигурационный файл добавить строку:
    restrict default noserve noquery
    Наличие такой строки запрещает узлу отвечать на внешние запросы связанные со временем.

    Уровень(stratum) – все сервера времени распределены на уровни. Сервер уровня 1 берет время из внешнего источника(уровень 0). Сервера уровня 2 берут время от сервера уровня 1 и так далее. Максимальный уровень сервера может быть 15, т.е уровней всего 16.

    В качестве источника точного времени можно использовать всё что угодно. Вы можете определить источником точного времени сервер в Internet, можете получать время с подключенного GPS приёмника. Да хоть солнечные часы. Главное что бы вы смогли с них данные снять.

    ntp.jpg

    Итак начнем настраивать AIX в соответствии с выбраной схемой.
    На каждом сервере необходимо выполнить несколько действий:
    1.Настройка файла конфигурации NTP /etc/ntp.conf
    2.Синхронизация с источником времени предыдущего уровня.
    3.Старт xntpd демона. Команда smitty xntpd -> выбрать «both» (запустить сейчас и после перезагрузки).
    4.Проверить синхронизацию командой ntpq -p

    Настройка /etc/ntp.conf для сервера(уровень 1)

    server 127.127.1.0
    fudge 127.127.1.5 stratum 1

    server pool.ntp.org # пул серверов точного времени в интернете или какой-нибудь другой источник времени
    driftfile /etc/ntp.drift
    tracefile /etc/ntp.trace

    Настройка /etc/ntp.conf для серверов 2го уровня.
    server 127.127.1.0
    fudge 127.127.1.5 stratum 2
    server 10.1.1.100 # ip адрес или имя сервера более низкого уровня в локальной сети
    peer 10.1.1.150 # ip адрес пира, находящегося на том же уровне
    driftfile /etc/ntp.drift
    tracefile /etc/ntp.trace

    Настройка /etc/ntp.conf для клиентов:

    server 127.127.1.0
    fudge 127.127.1.0 stratum 3
    server 10.1.1.150 # ip адрес или имя сервера более низкого уровня в локальной сети
    server 10.1.1.151 # ip адрес или имя сервера более низкого уровня в локальной сети
    driftfile /etc/ntp.drift
    tracefile /etc/ntp.trace

    Для упрощения можно оставить только уровень сервера верхнего уровня и уровень клиентов.

    Особенности настройки времени для виртуальных контроллеров домена

    Сегодня речь пойдет о некоторых особенностях настройки службы времени на виртуальных контроллерах домена. Обычно схема синхронизации времени в домене Active Directory выглядит следующим образом:

    • Все рядовые сервера и рабочие станции синхронизируют свое время с ближайшим доступным контроллером домена;
    • Все контроллеры домена синхронизируются с контроллером, которому принадлежит роль PDC-эмулятор;
    • PDC-эмулятор является главным источником времени в домене и поэтому должен быть настроен на синхронизацию с надежным внешним источником времени.

    Например так выглядят настройки времени на нашем виртуальном контроллере домена. Как видите, на нем с помощью групповых политик настроена синхронизация с внешним источником pool.ntp.org.

    настройки службы времени

    Однако если проверить текущий источник времени, то можно довольно сильно удивиться, т.к. в качестве источника выступает непонятная сущность с названием VM IC Time Synchronization Provider.

    вывод текущего источника времени

    Дело в том, что по умолчанию виртуальные машины Hyper-V синхронизируют свое время с хостом, причем вне зависимости от настроек службы времени внутри машины. В результате может получиться довольно странная ситуация, когда хост является членом домена и синхронизируется с контроллером, который в свою очередь является виртуальной машиной и синхронизируется с хостом.

    Для того, чтобы избежать подобной ситуации, для виртуальных контроллерах домена необходимо отключить синхронизацию времени с хостом. Сделать это можно двумя способами.

    Способ первый — отключить синхронизацию в свойствах ВМ. Для этого надо в оснастке Hyper-V Manager открыть свойства виртуальной машины, перейти в раздел «Integration Services» и снять галку с пункта «Time synchronization».

    отключение синхронизации с помощью Hyper-V manager

    Или то же самое с помощью PowerShell. Например такой командой выведем состояние службы для ВМ:

    Get-VMIntegrationService -VMName SRV1 -Name ″Time synchronization″

    А такой отключим синхронизацию:

    Get-VMIntegrationService -VMName SRV1 -Name ″Time synchronization″ | Disable-VMIntegrationService

    отключение синхронизации с помощью powershell

    Способ второй — отредактировать реестр внутри виртуальной машины. Для отключения синхронизации надо выставить значение для параметра Enabled, находящегося в разделе HKLMSYSTEMCurrentControlSetServicesW32TimeTimeProvidersVMICTimeProvider.

    отключение синхронизации времени с помощью правки реестра

    Эту настройку можно произвести из командной строки, выполнив команду:

    reg add HKLMSYSTEMCurrentControlSetServicesW32TimeTimeProvidersVMICTimeProvider /v Enabled /t reg_dword /d 0

    добавление параметра реестра

    После отключения синхронизации любым из описанных способов необходимо хорошенько пнуть службу времени, чтобы она перестроилась на новый источник. На контроллере домена с ролью PDC-emulator необходимо рестартовать службу и запустить синхронизацию:

    net stop w32time & net start w32time
    w32tm /resync /force

    рестарт службы времени

    На остальных контроллерах дополнительно надо выполнить команду:

    w32tm/config /syncfromflags:DOMHIER /update

    Это заставит службу времени выбрать в качестве источника PDC-emulator согласно доменной иерархии. Таким образом мы получим правильную схему синхронизации времени в домене.

    голоса
    Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector