كيف يمكنني إجراء Ping أو Traceroute باستخدام Python الأصلي؟

StackOverflow https://stackoverflow.com/questions/1151771

  •  18-09-2019
  •  | 
  •  

سؤال

أرغب في أن أكون قادرا على أداء Ping and Traceroute من داخل Python دون الحاجة إلى تنفيذ أوامر Shell المقابلة لذلك أفضل حل ثعبان الأصلي.

هل كانت مفيدة؟

المحلول

غالبا ما يتم تشغيل الترجمة الفورية كجذر على أساس الأمان (وبالطبع تحتاج إلى الحصول على إذن الجذر للوصول إلى "RAW" المجسم حسب الحاجة من مواصفات ICMP من بينغ و Traceroute!)، ولكن إذا لم يكن لديك أي مشاكل مع ذلك انها ليست صعبة - على سبيل المثال، هذا المشنور يعطي بينغ عمياء، وجيريمي هيلتون القديم صفحة لا يزال هناك كود أساسي قابل للاستخدام غير قابل للاستخدام من أجل ICMP (كل من بينغ و Traceroute) على الرغم من أنه مكتوب للحصول على إصدارات Python القديمة القديمة ويحتاج إلى تلمياح Litte للتألق بالحديث - ولكن، فإن المفاهيم كلها هناك، في كل من عناوين URL أعطيتك!

نصائح أخرى

إذا كنت لا تمانع في استخدام وحدة نمطية خارجية وعدم استخدام UDP أو TCP، Scary. هو الحل السهل:

from scapy.all import *
target = ["192.168.1.254"]
result, unans = traceroute(target,l4=UDP(sport=RandShort())/DNS(qd=DNSQR(qname="www.google.com")))

أو يمكنك استخدام إصدار TCP

from scapy.all import *
target = ["192.168.1.254"]
result, unans = traceroute(target,maxttl=32)

يرجى ملاحظة أنه سيتعين عليك تشغيل Scary كجذر من أجل أن تكون قادرا على أداء هذه المهام أو ستحصل على:

socket.error: [Errno 1] Operation not permitted

ال مكتبة Webb. مفيد جدا في أداء جميع أنواع المستخلصات ذات الصلة بالويب ... ويمكن القيام ب Ping و Traceroute بسهولة من خلاله. ما عليك سوى تضمين عنوان URL الذي تريده Traceroute إلى:

import webb
webb.traceroute("your-web-page-url")

إذا كنت ترغب في تخزين سجل Traceroute إلى ملف نصي تلقائيا، استخدم الأمر التالي:

webb.traceroute("your-web-page-url",'file-name.txt')

وبالمثل، يمكن الحصول على عنوان IP ل URL (Server) مع الأسطر التالية من التعليمات البرمجية:

print(webb.get_ip("your-web-page-url"))

آمل أن يساعد!

قد ترغب في التحقق من Scary. صفقة. إنه سكين الجيش السويسري لأدوات الشبكة لبيتثون.

ICMP Ping هو معيار كجزء من بروتوكول ICMP.

يستخدم Traceroute ميزات ICMP و IP لتحديد مسار عبر الوقت للعيش القيم. باستخدام قيم TTL، يمكنك القيام بالتتبعات في مجموعة متنوعة من البروتوكولات طالما تعمل IP / ICMP لأن ICMP TTL تجاوزت الرسائل التي تخبرك عن القفز في المسار.

إذا حاولت الوصول إلى منفذ حيث لا يتوفر أي مستمع، وفقا لقواعد بروتوكول ICMP، فمن المفترض أن يرسل المضيف رسالة غير قابلة للوطلان ICMP.

كتبت tcptraceroute بسيطة في بيثون التي لا تحتاج إلى امتيازات الجذر http://www.thomas-guetgetler.de/scripts/tcptraceroute.py.txt.

ولكن لا يمكنها عرض عناوين IP للقفزات المتوسطة. ولكن في بعض الأحيان يكون مفيدا، نظرا لأنك تستطيع تخمين مكان جدار الحظر هو: إما في البداية أو في نهاية الطريق.

ال mtrpacket حزمة. يمكن استخدامها لإرسال مجسات الشبكة، والتي يمكن أن تؤدي أي ping أو traceroute. نظرا لأنه يستخدم الطرف الخلفي لأداة Commandline MTR، فإنه لا يتطلب تشغيل البرنامج النصي الخاص بك كجذر.

يستخدم أيضا حلقة حدث ASYNCIO، بحيث يمكنك الحصول على العديد من التتبعات المستمرة أو الأصوات في وقت واحد، وتعامل مع نتائجها لأنها كاملة.

هنا هو برنامج نصي Python إلى Traceroute إلى "example.com":

import asyncio
import mtrpacket

async def trace():
    async with mtrpacket.MtrPacket() as mtr:
        for ttl in range(1, 256):
            result = await mtr.probe('example.com', ttl=ttl)
            print(result)

            if result.success:
                break

asyncio.get_event_loop().run_until_complete(trace())

يتم استخدام الحلقة مع "TTL" لأن "الوقت إلى العيش" لحزمة صادرة يحدد عدد قفزات الشبكة ستقدم الحزمة قبل انتهاء صلاحية وإرسال خطأ مرة أخرى إلى المصدر الأصلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top