بدست آوردن ساعت و تاریخ فعلی از اینترنت با پایتون (NTP) :: Mr Python | مستر پایتون

بدست آوردن ساعت و تاریخ فعلی از اینترنت با پایتون (NTP)

  • ۵۱۰

بدست آوردن ساعت و تاریخ فعلی از اینترنت با پایتون (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]

  • سلام

    من یه سوال دارم

     

    میگن فولدر استارت آپ هر ویندوزی فرق داره

    چطوری میشه یه اسکریمتی نوشا که از نوع ویندوز مسیر استارت اپ رو پیدا کنه تا بعدش فایل رو کپی کنه اونجا؟

    پاسخ:
    سلام. 
    از کتابخونه winshell میتونید استفاده کنید . دارای مسیر های مهم مثل desktop , startup , ... هستش . 
    همین چند روز آموزش استفاده از کتابخونشو داخل کانال تلگراممون میزاریم :)
  • محمد صادق عبداللهی

    دلمان برای پست هاتون تنگ شده بود

    آموزش گیم هکینگ رو کی ادامه می دید؟

    پاسخ:
    سلام . دیگه ببخشید بابت این تاخیرا :)
    تو همین هفته قسمت بعدیش منتشر میشه :)

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی