يتمثل دور اسم المضيف في المساعدة في تحديد الأجهزة الموجودة على الشبكة وتحديد موقعها، مما يجعلها ميزة مهمة في المهام المتعلقة بالشبكة.
في هذا البرنامج التعليمي، سوف نتعلم جميع الأساليب والتقنيات المتنوعة التي يمكننا استخدامها لاسترداد اسم المضيف لنظام ما برمجيًا باستخدام لغة البرمجة Go.
لماذا أحتاج إلى اسم المضيف؟
على الرغم من أنه قد يختلف وفقًا لاحتياجاتك ومتطلبات التطبيق، إلا أن بعض حالات الاستخدام الشائعة التي قد تحتاج فيها إلى استرداد اسم المضيف لجهاز ما تتضمن ما يلي:
- إدارة التكوين – إحدى حالات الاستخدام الشائعة لأسماء المضيفين هي عند تكوين الخدمات والتطبيقات على جهاز بعيد.
- التسجيل والمراقبة - حالة استخدام أخرى هي عندما تحتاج إلى تضمين معرف اسم المضيف في سجلات الهوية.
- برمجة الشبكة – إذا كنت بحاجة إلى تنفيذ أي شكل من أشكال برمجة الشبكة، فستحتاج إلى اسم المضيف. على سبيل المثال، إنشاء اتصالات أو حل عناوين IP والمزيد.
بعد ذلك، دعونا نتعلم الطرق والتقنيات المختلفة لجلب اسم المضيف للجهاز.
الطريقة الأولى: استخدام حزمة نظام التشغيل
الطريقة الأكثر وضوحًا وبساطة لاسترداد اسم المضيف في Go هي استخدام حزمة نظام التشغيل. تحتوي حزمة نظام التشغيل على تطبيقات منخفضة المستوى للتفاعل مع اسم المضيف والتي تتضمن مهام الشبكة الأساسية.
خذ بعين الاعتبار رمز المثال التالي الذي يوضح كيفية استخدام حزمة نظام التشغيل لجلب اسم المضيف لنظام معين:
طَرد رئيسييستورد (
'إف إم تي'
'أنت'
)
func رئيسي () {
اسم المضيف , يخطئ := أنت . اسم المضيف ()
لو يخطئ != لا شيء {
fmt . برينتلن ( 'خطأ:' , يخطئ )
يعود
}
fmt . برينتلن ( 'اسم المضيف:' , اسم المضيف )
}
في هذا المثال، نبدأ باستيراد حزم fmt وOS للعمل مع الوظائف المتعلقة بنظام التشغيل.
نقوم بعد ذلك باستدعاء الدالة os.Hostname() لاسترداد اسم المضيف للجهاز الحالي. نضمن أيضًا معالجة الأخطاء المحتملة التي قد تحدث عند محاولة استرداد اسم المضيف.
وأخيرا، يمكننا طباعة اسم المضيف على النحو التالي:
اسم المضيف : مجهول . محليتتمثل إحدى ميزات استخدام حزمة نظام التشغيل في أنها واضحة جدًا وتعمل على أي نظام تقريبًا مثبت عليه برنامج التحويل البرمجي Go.
الطريقة الثانية: استخدام حزمة Syscall (Win)
الطريقة الثانية التي يمكننا استخدامها لجلب اسم المضيف في Go هي استخدام حزمة syscall. توفر هذه الطريقة مزيدًا من التحكم ويمكن أن تكون مفيدة عندما نحتاج إلى إجراء تفاعلات النظام ذات المستوى المنخفض.
فيما يلي مثال على كيفية استخدام حزمة syscall لجلب اسم المضيف:
طَرد رئيسييستورد (
'إف إم تي'
'نداء النظام'
'غير آمن'
)
func رئيسي () {
كان buf [ 1024 ] بايت
مقاس := uint32 ( فقط ( buf ))
يخطئ := com.syscall . احصل على اسم الكمبيوتر (( * uint16 )( غير آمن . المؤشر ( & بوف [ 0 ])))، &مقاس )
لو يخطئ != لا شيء {
fmt . برينتلن ( 'خطأ:' , يخطئ )
يعود
}
اسم المضيف := com.syscall . UTF16ToString ( buf [:])
fmt . برينتلن ( 'اسم المضيف:' , اسم المضيف )
}
يجب أن يعيد هذا اسم المضيف للجهاز الحالي.
العيب الرئيسي لهذه التقنية هو أنها خاصة بنظام Windows فقط.
الطريقة الثالثة: استخدام أمر خارجي
يمكننا إعادة الاتصال بعملية استخدام حزم النظام واستخدام Go فقط لاستدعاء أمر خارجي يمكن أن يساعد في استرداد اسم المضيف والتقاط الإخراج.
هذا ممكن باستخدام حزمة OS/exec. مثال على تنفيذ التعليمات البرمجية هو كما يلي:
طَرد رئيسييستورد (
'إف إم تي'
'نظام التشغيل/التنفيذي'
)
func رئيسي () {
كمد := com.exec . يأمر ( 'اسم المضيف' )
اسم المضيف , يخطئ := كمد . انتاج | ()
لو يخطئ != لا شيء {
fmt . برينتلن ( 'خطأ:' , يخطئ )
يعود
}
fmt . برينتلن ( 'اسم المضيف:' , خيط ( اسم المضيف ))
}
في هذا المثال، قمنا بإنشاء متغير يسمى 'cmd' والذي يحتوي على أمر اسم المضيف. يتيح لنا هذا الأمر الحصول على اسم المضيف للجهاز المحلي.
نستخدم بعد ذلك طريقة cmd.Output() لتنفيذ الأمر والتقاط الإخراج الناتج.
الطريقة الرابعة: استخدام Psutil
إذا لم تكن على دراية بـ psutil أو الأدوات المساعدة للعمليات والنظام، فهي مكتبة مجانية ومفتوحة المصدر عبر الأنظمة الأساسية لاسترداد المعلومات حول العمليات الجارية واستخدام النظام. يتضمن ذلك موارد مثل وحدة المعالجة المركزية والذاكرة والأقراص والشبكات وأجهزة الاستشعار والمزيد.
بشكل افتراضي، يتم تنفيذ psutil في بايثون. لكن لحسن الحظ، لدينا إصدار تم نقله إلى Go والذي يمكننا استخدامه لاسترداد اسم المضيف والمهام الرائعة الأخرى.
https://github.com/shirou/gopsutil
ابدأ بتثبيت الحزمة باستخدام الأمر 'go get' كما يلي:
$ يذهب احصل على جيثب . مع / شيرو / com.gosutil / يستضيفبمجرد التثبيت، يمكننا إنشاء الكود التالي لاسترداد اسم المضيف للنظام:
طَرد رئيسييستورد (
'إف إم تي'
'github.com/shirou/gopsutil/host'
)
func رئيسي () {
معلومات , يخطئ := يستضيف . معلومات ()
لو يخطئ != لا شيء {
fmt . برينتلن ( 'خطأ:' , يخطئ )
يعود
}
fmt . برينتلن ( 'اسم المضيف:' , معلومات . اسم المضيف )
}
يستخدم هذا المثال الأسلوب host.Info() لجمع المعلومات حول المضيف. أخيرًا، نقوم باسترداد قيمة اسم المضيف وطباعتها على وحدة التحكم.
خاتمة
في هذا البرنامج التعليمي، تعلمنا كل شيء عن ميزة اسم المضيف في Go. لقد قمنا أيضًا بتغطية جميع الطرق التي يمكنك استخدامها لاسترداد اسم المضيف للجهاز المحلي.