-
سه شنبه, ۲۸ دی ۱۴۰۰، ۰۶:۳۷ ب.ظ
-
۵۸۸
بدست آوردن ساعت و تاریخ فعلی از اینترنت با پایتون (NTP)
درود به همه !
گاهی اوقات ممکنه ما اسکریپت هایی بنویسیم که نیاز دارن زمان دقیق فعلی رو بدونن . دوتا کار میشه کرد . یکی اینکه زمان سیستمی که اسکریپت روش اجرا شده رو بفهمیم . ولی مشکل اینجاست که همیشه نمیشه به زمان سیستم کاربر اعتماد کرد . ممکنه زمان سیستم درست نباشه . یه راه دقیق تر هست و اونم اینه که ساعت و تاریخ فعلی رو از طریق اینترنت خیلی دقیق بفهمیم . امروز اسکریپتی مینویسیم که ساعت و تاریخ فعلی رو از طریق پروتکل NTP از اینترنت بدست میاره :)
پروتکل NTP چیست ؟ پروتکل NTP مخفف Network Time Protocol یک پروتکل تحت شبکه است که برای همگام سازی ساعت سیستم ها به کار میرود . این پروتکل بر اساس منطق کلاینت سروری کار میکند .
ببینید خیلی سادس :
یک سری سرور های NTP در دنیا وجود دارن که ساعت و تاریخ رو خیلی خیلی دقیق تو خودشون لحظه به لحظه دارن . حالا با وجود این سرور ها فرض کنید اسکریپت ما میخواد ساعت و تاریخ فعلی رو بفهمه . پس اسکریپت ما یک کلاینت NTP میشه . کلاینت های NTP برای اینکه ساعت و تاریخ دقیق رو بفهمن سریع یه درخواست UDP میفرستن به این سرور های NTP و این سرور ها ساعت و تاریخ فعلی رو در جواب براشون میفرستن :)
اینطوریه که کلاینت های NTP (مثلا اسکریپت ما) میتونن ساعت و تاریخ دقیق رو بفهمن .
اما یه نکته هست . ما گفتیم که سرور های NTP میان ساعت و تاریخ فعلی رو برای کلاینت هاشون میفرستن . اما در چه فرمتی و به چه شکلی این اطلاعات رو میفرستن ؟
کل این اطلاعات (ساعت و تاریخ) رو در قالب یک عدد میفرستن . این عدد تعداد ثانیه هاییه که از یکم ژانویه سال 1970 گذشته (یا خدا) . حالا شاید بگید خب چجوری این عدد رو تبدیل به ساعت و تاریخ فعلی کنیم ؟ یعنی حساب کنیم دستی خودمون ؟ نه اقا کتابخونه time تو پایتون برامون اینکارو میکنه .
توضیح بسه بریم سراغ اسکریپت نویسی . کارمون اینه یه اسکریپتی بنویسیم که به محض اجرا شدن بره مثل بچه آدم ساعت و تاریخ فعلی رو از یک NTP سرور معتبر بگیره و برامون چاپ کنه .
اول از همه باید کتابخونه ntplib رو نصب کنیم . این کتابخونه در اصل برای کار با پروتکل ntp در پایتون هستش و به ما این قابلیت رو میده که به سادگی درخواست های ntp بفرستیم .
برای نصب این کتابخونه از ابزار pip استفاده میکنیم :
نصب ntplib در لینوکس :
MrPython@debian:~$ sudo pip3 install ntplib
نصب ntplib در ویندوز :
C:\> pip install ntplib
سورس کد :
# https://mrpython.blog.ir
import ntplib import time
ntp_server = "pool.ntp.org" # Address of ntp server
client = ntplib.NTPClient() # Create a ntp client
response = client.request(ntp_server) # send request to ntp_server
now = time.ctime(response.tx_time) # Calculate time
print(now)
توضیح سورس کد :
ابتدا کتابخونه های مورد نیاز رو ایمپورت کردیم. سپس یه متغییر تعریف کردیم به نام ntp_server که در واقع آدرس یک سرور ntp معتبر رو داخلش ذخیره کردیم . سپس یک کلاینت ntp تعریف کردیم و اونو ریختیم داخل متغییر client . با استفاده از این کلاینت میتونیم درخواست هامون رو بفرستیم به سرور های ntp . در خط بعد یک درخواست فرستادیم به سرور ntp_server و نتیجشو گفتیم بریزه داخل response . در واقع response حاوی جوابیه که سرور ntp بهمون برگردونده .
حالا این جواب همینطور که گفتم تعداد ثانیه هاییه که از یکم ژانویه سال 1970 گذشته . برای اینکه ببینید این عدد رو کافیه response.tx_time رو چاپ کنید !
کتابخونه time یک تابعی داره به نام ctime که در ورودی تعداد ثانیه هایی که از ۱ ژانویه سال 1970 گذشته رو میگیره و ساعت و تاریخ فعلی رو مثل بچه آدم خروجی میده . ما از این تابع استفاده کردیم و ساعت و تاریخ فعلی رو حساب کردیم و ریختیم داخل متغییر now . نهایتا هم متغییر now رو چاپ کردیم .
نتیجه ی اجرای اسکریپت :
یا حق !
Telegram Channel : @mrpythonblog
[تصویر پست از www.msnoob.com]