Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
rdpy — بروتوكول سطح المكتب البعيد في Twisted Python | Kitploit
أدوات/GitHubGitHub/citronneur/rdpy
أمن الشبكاتاختبار الاختراقالفريق الأحمرأداة الوصول عن بعد
GitHubcitronneur/rdpy

rdpy

بروتوكول سطح المكتب البعيد في Twisted Python

عرض المستودع
1.7k5405منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

RDPY Build Status PyPI version

بروتوكول سطح المكتب البعيد (RDP) في بايثون باستخدام Twisted.

RDPY هو تنفيذ خالص بلغة بايثون لبروتوكول Microsoft RDP (بروتوكول سطح المكتب البعيد) (جانب العميل والخادم). تم بناء RDPY فوق محرك الشبكة القائم على الأحداث Twisted. يدعم RDPY طبقة الأمان القياسية لـ RDP، و RDP عبر SSL، ومصادقة NLA (عبر بروتوكول مصادقة ntlmv2).

يوفر RDPY الثنائيات التالية لـ RDP و VNC:

  • وكيل Man In The Middle لـ RDP والذي يسجل الجلسات
  • مصيدة RDP (Honeypot)
  • أداة التقاط شاشة لـ RDP
  • عميل RDP
  • عميل VNC
  • أداة التقاط شاشة لـ VNC
  • مشغل RSS

البناء

تم تنفيذ RDPY بالكامل بلغة بايثون، باستثناء خوارزمية فك ضغط الصور النقطية (bitmap) والتي تم تنفيذها بلغة C لأغراض الأداء.

التبعيات

التبعيات مطلوبة فقط للثنائيات القائمة على PyQt4:

  • rdpy-rdpclient
  • rdpy-rdpscreenshot
  • rdpy-vncclient
  • rdpy-vncscreenshot
  • rdpy-rssplayer

لينكس

مثال للأنظمة المبنية على Debian:

root@kitploit:~
sudo apt-get install python-qt4

OS X

مثال لتثبيت PyQt على OS X باستخدام Homebrew:

root@kitploit:~
$ brew install qt sip pyqt

ويندوز

x86x86_64
PyQt4PyQt4
PyWin32PyWin32

البناء

root@kitploit:~
$ git clone https://github.com/citronneur/rdpy.git rdpy
$ pip install twisted pyopenssl qt4reactor service_identity rsa pyasn1
$ python rdpy/setup.py install

أو باستخدام PIP:

root@kitploit:~
$ pip install rdpy

بالنسبة لـ virtualenv، ستحتاج إلى ربط مكتبة qt4 به:

root@kitploit:~
$ ln -s /usr/lib/python2.7/dist-packages/PyQt4/ $VIRTUAL_ENV/lib/python2.7/site-packages/
$ ln -s /usr/lib/python2.7/dist-packages/sip.so $VIRTUAL_ENV/lib/python2.7/site-packages/

ثنائيات RDPY

يأتي RDPY مع بعض الثنائيات المفيدة جداً. هذه الثنائيات متوافقة مع لينكس وويندوز.

rdpy-rdpclient

rdpy-rdpclient هو عميل RDP بسيط يعمل مع Qt4.

root@kitploit:~
$ rdpy-rdpclient.py [-u username] [-p password] [-d domain] [-r rss_ouput_file] [...] XXX.XXX.XXX.XXX[:3389]

يمكنك استخدام rdpy-rdpclient في سيناريو جلسة التسجيل (Recorder Session Scenario)، المستخدم في rdpy-rdphoneypot.

rdpy-vncclient

rdpy-vncclient هو عميل VNC بسيط يعمل مع Qt4.

root@kitploit:~
$ rdpy-vncclient.py [-p password] XXX.XXX.XXX.XXX[:5900]

rdpy-rdpscreenshot

يقوم rdpy-rdpscreenshot بحفظ شاشة تسجيل الدخول في ملف.

root@kitploit:~
$ rdpy-rdpscreenshot.py [-w width] [-l height] [-o output_file_path] XXX.XXX.XXX.XXX[:3389]

rdpy-vncscreenshot

يقوم rdpy-vncscreenshot بحفظ أول تحديث للشاشة في ملف.

root@kitploit:~
$ rdpy-vncscreenshot.py [-p password] [-o output_file_path] XXX.XXX.XXX.XXX[:5900]

rdpy-rdpmitm

rdpy-rdpmitm هو وكيل RDP يسمح لك بتنفيذ هجوم Man In The Middle على بروتوكول RDP. يسجل سيناريو الجلسة في ملف rss يمكن إعادة تشغيله بواسطة rdpy-rssplayer.

root@kitploit:~
$ rdpy-rdpmitm.py -o output_dir [-l listen_port] [-k private_key_file_path] [-c certificate_file_path] [-r (for XP or server 2003 client)] target_host[:target_port]

دليل الإخراج يُستخدم لحفظ ملف rss بالتنسيق التالي (YYYYMMDDHHMMSS_ip_index.rss) ملف المفتاح الخاص وملف الشهادة هما ملفات تشفير تقليدية لاتصالات SSL. يمكن لبروتوكول RDP التفاوض على طبقة الأمان الخاصة به. إذا تم حذف أحد المعاملين أو كليهما، يستخدم الخادم طبقة أمان RDP القياسية.

rdpy-rdphoneypot

rdpy-rdphoneypot هو مصيدة (Honeypot) لـ RDP. يستخدم سيناريو جلسة مسجل لإعادة تشغيل السيناريو عبر بروتوكول RDP.

root@kitploit:~
$ rdpy-rdphoneypot.py [-l listen_port] [-k private_key_file_path] [-c certificate_file_path] rss_file_path_1 ... rss_file_path_N

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

rdpy-rssplayer

يُستخدم rdpy-rssplayer لإعادة تشغيل ملفات سيناريو الجلسة المسجلة (rss) التي تم إنشاؤها بواسطة ثنائيات rdpy-rdpmitm أو rdpy-rdpclient.

root@kitploit:~
$ rdpy-rssplayer.py rss_file_path

واجهة RDPY Qt Widget

يمكن أيضاً استخدام RDPY كـ Qt widget من خلال فئة rdpy.ui.qt4.QRemoteDesktop. يمكن تضمينها في تطبيق Qt الخاص بك. يجب استخدام qt4reactor في تطبيقك لكي يعمل Twisted و Qt معاً. لمزيد من التفاصيل، راجع مصادر rdpy-rdpclient.

مكتبة RDPY

باختصار، يمكن استخدام RDPY كمكتبة بروتوكول مع محرك Twisted.

عميل RDP بسيط

root@kitploit:~
from rdpy.protocol.rdp import rdp

class MyRDPFactory(rdp.ClientFactory):

    def clientConnectionLost(self, connector, reason):
        reactor.stop()

    def clientConnectionFailed(self, connector, reason):
        reactor.stop()

    def buildObserver(self, controller, addr):

        class MyObserver(rdp.RDPClientObserver):

            def onReady(self):
                """
                @summary: يتم استدعاؤه عندما تكون المجموعة جاهزة
                """
                # إرسال مفتاح 'r'
                self._controller.sendKeyEventUnicode(ord(unicode("r".toUtf8(), encoding="UTF-8")), True)
                # تحريك الفأرة والنقر على البيكسل 200x200
                self._controller.sendPointerEvent(200, 200, 1, true)

            def onUpdate(self, destLeft, destTop, destRight, destBottom, width, height, bitsPerPixel, isCompress, data):
                """
                @summary: إعلام بتحديث الصورة النقطية
                @param destLeft: موضع xmin
                @param destTop: موضع ymin
                @param destRight: موضع xmax لأن RDP يمكنه إرسال الصورة النقطية مع حشوة
                @param destBottom: موضع ymax لأن RDP يمكنه إرسال الصورة النقطية مع حشوة
                @param width: عرض الصورة النقطية
                @param height: ارتفاع الصورة النقطية
                @param bitsPerPixel: عدد البتات لكل بيكسل
                @param isCompress: استخدام ضغط RLE
                @param data: بيانات الصورة النقطية
                """
                
            def onSessionReady(self):
		        """
		        @summary: جلسة ويندوز جاهزة
		        """

            def onClose(self):
                """
                @summary: يتم استدعاؤه عند إغلاق المجموعة
                """

        return MyObserver(controller)

from twisted.internet import reactor
reactor.connectTCP("XXX.XXX.XXX.XXX", 3389, MyRDPFactory())
reactor.run()

خادم RDP بسيط

root@kitploit:~
from rdpy.protocol.rdp import rdp

class MyRDPFactory(rdp.ServerFactory):

    def buildObserver(self, controller, addr):

        class MyObserver(rdp.RDPServerObserver):

            def onReady(self):
                """
                @summary: يتم استدعاؤه عندما يكون الخادم جاهزاً
                لإرسال واستقبال الرسائل
                """

            def onKeyEventScancode(self, code, isPressed):
                """
                @summary: حدث يتم استدعاؤه عند اكتشاف حدث لوحة المفاتيح بتنسيق scancode
                @param code: رمز scancode للمفتاح
                @param isPressed: صحيح إذا كان المفتاح مضغوطاً
                @see: rdp.RDPServerObserver.onKeyEventScancode
                """

            def onKeyEventUnicode(self, code, isPressed):
                """
                @summary: حدث يتم استدعاؤه عند اكتشاف حدث لوحة المفاتيح بتنسيق unicode
                @param code: رمز unicode للمفتاح
                @param isPressed: صحيح إذا كان المفتاح مضغوطاً
                @see: rdp.RDPServerObserver.onKeyEventUnicode
                """

            def onPointerEvent(self, x, y, button, isPressed):
                """
                @summary: حدث يتم استدعاؤه عند حدوث حدث الفأرة
                @param x: موضع x
                @param y: موضع y
                @param button: الزر 1, 2, 3, 4 أو 5
                @param isPressed: صحيح إذا تم ضغط زر الفأرة
                @see: rdp.RDPServerObserver.onPointerEvent
                """

            def onClose(self):
                """
                @summary: يتم استدعاؤه عند إغلاق العميل البشري للاتصال
                @see: rdp.RDPServerObserver.onClose
                """

        return MyObserver(controller)

from twisted.internet import reactor
reactor.listenTCP(3389, MyRDPFactory())
reactor.run()

عميل VNC بسيط

root@kitploit:~
from rdpy.protocol.rfb import rfb

class MyRFBFactory(rfb.ClientFactory):

    def clientConnectionLost(self, connector, reason):
        reactor.stop()

    def clientConnectionFailed(self, connector, reason):
        reactor.stop()

    def buildObserver(self, controller, addr):
        class MyObserver(rfb.RFBClientObserver):

            def onReady(self):
                """
                @summary: حدث عندما تكون مجموعة الشبكة جاهزة لاستقبال أو إرسال الأحداث
                """

            def onUpdate(self, width, height, x, y, pixelFormat, encoding, data):
                """
                @summary: تنفيذ واجهة RFBClientObserver
                @param width: عرض الصورة الجديدة
                @param height: ارتفاع الصورة الجديدة
                @param x: موضع x للصورة الجديدة
                @param y: موضع y للصورة الجديدة
                @param pixelFormat: هيكل pixefFormat في rfb.message.PixelFormat
                @param encoding: نوع الترميز rfb.message.Encoding
                @param data: بيانات الصورة وفقاً لتنسيق البيكسل والترميز
                """

            def onCutText(self, text):
                """
                @summary: حدث عندما يرسل الخادم حدث نص مقصوص
                @param text: النص المستلم
                """

            def onBell(self):
                """
                @summary: حدث عندما يرسل الخادم صوت بيب
                """

            def onClose(self):
                """
                @summary: يتم استدعاؤه عند إغلاق المجموعة
                """

        return MyObserver(controller)

from twisted.internet import reactor
reactor.connectTCP("XXX.XXX.XXX.XXX", 3389, MyRFBFactory())
reactor.run()
تنزيل الأداة