سؤال

أرغب في التقاط جميع حزم HTTP الواردة لجهازي. للقيام بذلك أنا أستخدم Sharppcap وهو عبارة WINPCAP المجمع.

يعمل Sharppcap بشكل جيد للغاية ولكنه يلتقط حزم TCP وهذا مستوى منخفض للغاية للقيام بما أريد. هل يعرف أحد كيف يمكنني بسهولة الحصول على طلبات / ردود http الكامل من كل حزم TCP هذه؟

شكرا

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

المحلول

تمكن Sharppcap بالفعل من التقاط الحزم بنفس الطريقة التي تقوم بها Wireshark (فقط في التعليمات البرمجية بدلا من واجهة المستخدم الرسومية). ويمكنك إما تحليلها مباشرة أو يمكنك تفريغها على محرك الأقراص بتنسيق ملف .pcap المشترك.

خطوات تحليل التقاط هي:

  • اختيار واجهة
  • افتح اتصال في الوضع المميز
  • ابدأ التقاط إما باستخدام حلقة أثناء وجود حل
  • تحليل الحزمة الخام إلى النوع الذي تريده

إذا كنت تقرأ .pcap ملفات التفريغ العملية هي نفسها تقريبا ما عدا استدعاء قارئ الالتقاط دون اتصال، ولا تحتاج إلى اختيار واجهة، ولا تحتاج إلى تعيين الوضع المميز. جميع المرشحات القياسية التي تستخدمها Wireshark، Tcpdump، ومعظم أطر PCAP الأخرى في Sharppcap. للإشارة إلى هذه التحقق من رجل tcpdump.

لا يوجد حاليا أي دعم لتحليل HTTP مباشرة ولكن تحليل حزم TCP سهل حقا.

عندما تتلقى الحزمة الخام (غير تحليل) قم بذلك:

TCPPacket packet = TCPPacket.GetEncapsulated(rawPacket);

PACEET.NET (مكون منفصل ومضمون من SharpPCAP) قادرة على سحب جزء TCP مباشرة حتى إذا تم تغليف الاتصال بواسطة VPN أو PPOE أو PPP.

بمجرد حصولك على Tcppacket Carsed فقط Grab Packet.payLoadBoTes للحصول على الحمولة في صفيف بايت يجب أن يحتوي على رأس HTTP في البايتات الخام التي يمكن تحويلها إلى تنسيق النص المناسب (لست متأكدا حقا ما إذا كان رؤوس HTTP يستخدم UTF-8 أو ترميز ASCII على هذا المستوى). يجب أن يكون هناك الكثير من الأدوات / المكتبات المتاحة بحرية لتحليل رؤوس HTTP.


لاستخراج حزمة HTTP من TCP:

تحتاج إلى جمع حزم TCP للاتصال كما تأتي وإذا كانت البيانات مجزأة (أكبر من 1500 بايت) تحتاج إلى إعادة تجميع الأجزاء في الذاكرة. لاكتشاف الأجزاء التي تذهب بأي ترتيب تحتاج إلى تتبع أرقام التسلسل / الاعتراف بعناية.

هذا شيء غير تافه لإنجازه مع Sharppcap لأنك تعمل مع جزء أقل بكثير من المكدس وإعادة تجميع الاتصال يدويا.

يحتوي Wireshark على مقالة مثيرة للاهتمام حول كيفية إنجاز هذا في C.

اعتبارا من الآن، لا يدعم SharpPCap تحليل حمولة بروتوكول TCP.


إذا كنت تبحث عن أمثلة سهلة متابعة حول كيفية استخدام SharpPCAP قم بتنزيل الشجرة المصدر وإلقاء نظرة على المشاريع المثال المضمنة. هنالك أيضا تعليمي Sharppcap على CodeProject.

إذا كان لديك المزيد من الأسئلة و / أو الرغبة في تقديم أي طلبات ميزة إلى المشروع، فلا تتردد في النشر في مشروع SourceForge. إنه بعيد عن الموت ويظل تحت التطوير النشط.

ملاحظة: كريس مورغان هو قيادة المشروع وأنا أحد المطورين ل Sharppcap / Packet.net.

تحديث: مشروع البرنامج التعليمي في مشروع التعليمات البرمجية هو الآن حتى الآن لمطابقة API الحالي.

نصائح أخرى

فك تشفير تيار TCP إلى أزواج طلب HTTP / الاستجابة غير تافهة. أدوات مثل Wireshark تفعل هذا بذل جهد كبير.

كتبت غلاف Wireshark ل Ruby (وليس ذلك من شأنه أن يساعدك)، ولكن قبل أن كتبته، حاولت استخدام Tshark (إصدار سطر الأوامر من Wireshark). هذا لم يحل مشكلتي ولكن قد يعمل من أجلك. إليك الطريقة:

يمكنك التقاط الحزم وكتابةها إلى ملف PCAP (Workpcap ربما يكون له طريقة للقيام بذلك). في مرحلة ما، أغلق ملف CAP وبدء تشغيل واحد آخر، ثم تشغيل Tshark القديم مع مرشح لحركة مرور HTTP، وعلم يشير إلى أنك تريد الإخراج بتنسيق PDML. ستجد هذا هو تنسيق XML، والتحليل بسهولة مع أدوات System.xml، والتي تحتوي على قيمة كل حقل HTTP في مجموعة متنوعة من التنسيقات. يمكنك كتابة رمز C # لتفرخ Tshark، وأنابيب دفقه Stdout في قارئ XML حتى تحصل على الحزم من Tshark كما تظهر. لا أوصي باستخدام محلل DOM حيث يمكن إخراج PDML لملف الالتقاط كبير بالجنون بسرعة كبيرة.

ما لم تكن متطلباتك معقدة (كما كانت لي)، فقد يكون هذا كل ما تحتاجه.

أعتقد أنك قريب من الحل: إذا كان لديك حزم TCP من حركة مرور HTTP، فلديك فقط لاستخراج حمولة TCP من أجل إعادة إنشاء طلب / استجابة HTTP. انظر الى هذا حتى الدخول على طريقة ممكنة للقيام بذلك.

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