C# - كيفية استنشاق الحزم في التطبيق دون الاعتماد على winpcap؟

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

سؤال

معرفتي: أنا الآن أفهم كيفية كتابة تطبيق C# يمكنه مراقبة الحزم التي تدخل/خارج بطاقة الشبكة على الكمبيوتر الذي يعمل التطبيق. النهج الذي أعرفه يعتمد على http://www.winpcap.org/ يجري تثبيته بالفعل على جهاز الكمبيوتر ، ثم أستخدم غلاف C# مثل http://pcapdotnet.codeplex.com/ أو http://sourceforge.net/projects/sharppcap/ .

سؤال: ومع ذلك ، فإن سؤالي ، ما الذي يجب أن أفعله لتكون قادرًا على الحصول على تطبيق C# يمكنه شم الحزم التي لا تتطلب تطبيق/برامج تشغيل طرف ثالث؟

توضيح: هذا هو أنني أريد حقًا التطبيق الذي لدي حاليًا ولكن دون أي شرط بالنسبة لي أن أخبر المستخدم أن يضطر المستخدم إلى الذهاب وتنزيل/تثبيت XYZ قبل أن أتمكن من استخدام التطبيق. لغرض السؤال ، افترض أنه لا يُسمح بتنزيل وتثبيت تطبيق/برامج تشغيل الطرف الثالث أيضًا. (مع winpcap لست متأكدًا مما إذا كان بإمكانك تجميعه ، لكنني أعتقد أنه ليس من المفترض أن تكون على أي حال للأسف)

شكرًا

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

المحلول

أنا شخصياً سألتزم بـ winpcap. ولكن منذ أن طلبت ، من الممكن استنشاق الحزم من الشبكة باستخدام الكود التالي لتمكين مآخذ الأولية.

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
s.Bind(new IPEndPoint(IPAddress.Parse("<IP Address Here of NIC to sniff>"), 0));
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] inBytes = new byte[] { 1, 0, 0, 0 };
byte[] outBytes = new byte[] { 0, 0, 0, 0 };
s.IOControl(IOControlCode.ReceiveAll, inBytes, outBytes);

بمجرد الانتهاء من ذلك ، يمكنك استخدام Socket.Receive أو Socket.BeginReceive لقراءة حزم IP الخام.

نصائح أخرى

هناك طريقة لالتقاط الحزم الواردة/الصادرة على .NET باستخدام تطبيق Winsocks القياسي فقط. لقد رأيت مدونة مع مثال على كيف ولكن لم يعد لدي الرابط.

قصة قصيرة طويلة ، إنها حالة حافة متطرفة لأن هذا ليس ما كان مخصصًا له Winsocks (برنامج تشغيل شبكات Windows القياسي).

عادة ما يكون السبب وراء ضروري لالتقاط الحزم هو أنه يستخدم برنامج تشغيل شبكة NDIS الخاص به الذي يفتح الإمكانيات الكاملة لـ NIC. علاوة على ذلك ، فإنه يوفر أيضًا طريقة سهلة لتعيين المرشحات للحد من كمية الحزم التي يتم التقاطها على الواجهة المحددة.

أي ، سوف يتجاهل برنامج التشغيل حزم نوع معين على مستوى kernel بدلاً من مستوى usermode. لذلك ، ستتمكن من تصفية الحزم بشكل أكثر كفاءة والتقاط تحت أحمال أكبر على الشبكة.

في .NET ، لتصفية الحزم ، ستحتاج إلى توفير مخطط تصفية حزم طبقة التطبيق الخاصة بك والذي سيكون أقل كفاءة.

يحجب Windows الوصول إلى البروتوكولات غير القياسية لأسباب أمنية للأمن حتى لا تدعم حقًا استخدام الحزم الأولية للشبكات (على الرغم من أن الكود قد يكون ممكنًا). كانت الحزم الخام مخصصة دائمًا للبحث في تصميم بروتوكولات جديدة ، وليس الاستخدام العام.

لكل هذه الأسباب ، عادة ما يكون من الجيد التقاط WinPcap وغلاف لغتك المحددة لتنفيذ أي نوع من تطبيقات التقاط.

ملاحظة: أنا شخصياً أفضل SharppCap ، لكنني أيضًا متحيز لأنني أقوم بالتطوير في المشروع. PCAP.NET متشابه جدًا في تنفيذه عندما يتعلق الأمر بالتقاط ، فهو يتباعد بشكل أساسي عندما يتعلق الأمر بكيفية تحليل الحزم.

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