SharppCap
تم إدارتها بالكامل ، منصة متقاطعة (Windows ، Mac ، Linux) .NET Library لالتقاط الحزم من الأجهزة المباشرة والملفات
مستودع SharppCap الرسمي.
جدول المحتويات
- سمات
- أمثلة
- أجهزة الإدراج
- التقاط الحزم
- القراءة من ملف التقاط
- الكتابة إلى ملف التقاط
- دعم CI
- الإصدارات
- منصة ملاحظات محددة
- الترحيل من 5.x إلى 6.0
سمات
لتشريح الحزمة والخلق ، انظر packet.net.
أمثلة
راجع مجلد الأمثلة لمجموعة من المشاريع المثالية باستخدام SharppCap
أجهزة الإدراج
var devices = CaptureDeviceList . Instance ;
foreach ( var dev in devices )
Console . WriteLine ( "{0} n " , dev . ToString ( ) ) ; التقاط الحزم
void Device_OnPacketArrival ( object s , PacketCapture e )
{
Console . WriteLine ( e . GetPacket ( ) ) ;
}
using var device = LibPcapLiveDeviceList . Instance [ 0 ] ;
device . Open ( ) ;
device . OnPacketArrival += Device_OnPacketArrival ;
device . StartCapture ( ) ; القراءة من ملف التقاط
void Device_OnPacketArrival ( object s , PacketCapture e )
{
Console . WriteLine ( e . GetPacket ( ) ) ;
}
using var device = new CaptureFileReaderDevice ( "filename.pcap" ) ;
device . Open ( ) ;
device . OnPacketArrival += Device_OnPacketArrival ;
device . Capture ( ) ; الكتابة إلى ملف التقاط
using var device = new CaptureFileWriterDevice ( "somefilename.pcap" , System . IO . FileMode . Open ) ;
var bytes = new byte [ ] { 1 , 2 , 3 , 4 } ;
device . Write ( bytes ) ; دعم CI
لدينا دعم لعدد من أنظمة CI لعدة أسباب:
- تنوع أنظمة CI في حالة إغلاق أحدها
- أمثلة في حال ترغب في تخصيص SharppCap والاستفادة من أحد أنظمة CI هذه للبناء الداخلي. لاحظ أننا نفترض أنك تتبع ترخيص المكتبة.
الإصدارات
يتم إصدار SharppCap عبر Nuget
منصة ملاحظات محددة
- يفتقر OSX (على الأقل اعتبارًا من 11.1)
شكرًا
SharppCap هو مكانه اليوم بسبب عدد من المطورين الذين قدموا تحسينات وإصلاحات والمستخدمين الذين قدموا ملاحظات مفيدة من خلال القضايا وطلبات الميزات.
نحن نقدر بشكل خاص عددًا من المشاريع التي نبني عليها (لأن SharppCap عبارة عن مجموعة C#):
- libpcap - شكرا جزيلا لك على إطلاق 1.10
- NPCAP - لاستمرار دعم التقاط الحزم على Windows
الترحيل من 5.x إلى 6.0
نأمل أن تجد API 6.x أنظف وأسهل في الاستخدام.
6.0 يجلب عددًا من عمليات التنظيف التي أدت إلى كسر API لمستخدمي 5.x.
للمساعدة في الترحيل من 5.x إلى 6.0 ، فيما يلي قائمة ببعض التغييرات التي يجب عليك إجراؤها على استخدام SharppCap الخاص بك.
الأمثلة هي أيضا مورد رائع لأنها تظهر أمثلة العمل باستخدام أحدث واجهة برمجة التطبيقات.
- يتم إرجاع بيانات الحزمة عبر PacketCapture والتي تستخدم readonlyspan <>.
- يتم إجراء التحويل من readonlyspan <> إلى RawCapture بواسطة PacketCapture.getPacket ().
- هذا يتجنب تخصيص الذاكرة أثناء التقاط الحزم.
- من خلال تجنب تخصيص الذاكرة ونسخ الذاكرة ، قد يكون أداء الالتقاط الخام أسرع بنسبة 30 ٪.
- SPAN هي مثالية لحالات الاستخدام حيث يتم إلقاء الحزم على القرص للمعالجة اللاحقة.
- يتم استخدام Nativelibrary لتحسين دقة مكتبة الالتقاط
- يحسن حالة حل المكتبة على توزيع Linux حيث يوجد libpcap.so.xy symlink ولكن لا libpcap.so symlink
- تمت إزالة دعم Mono Dllmap حيث يدعم Mono Nativelbrary. راجع https://www.mono-project.com/news/2020/08/24/native-loader-net5/
- الأجهزة قابلة للتطبيق
- إزالة المكالمات لإغلاق ()
- تبديل "var device = xxx ؛" إلى "استخدام الجهاز = xxx ؛"
- إعادة تسمية OpenFlags -> devicemodes
- تم انهيار الأساليب المفتوحة () إلى طرق أقل مع المتغيرات الافتراضية.
- تم استبدال Devicemode بـ devicemodes لأن Devicemode لم يكن قادرًا على تغطية جميع مجموعات الطرق التي يمكنك من خلالها فتح جهاز.
- npcapdevice -> libpcaplivedevice
- إذا كنت تستخدم NPCAPDevice ، فيجب عليك التفكير في استخدام libpcaplivedevice. تأتي أحدث إصدارات NPCAP مع إصدارات أحدث من LIBPCAP التي توفر جميع وظائف واجهات برمجة التطبيقات الأصلية NPCAP تقريبًا.
- الفجوة الحالية هنا هي وضع الإحصائيات ، التي تدعمها NPCAP حاليًا فقط.
- كان هناك حديث عن غلاف وضع الإحصائيات الذي من شأنه أن يوفر وظائف مماثلة ، وإن كان دون نفس المستوى من الكفاءة كما لو تم القيام به في kernel أو Driver كما في Windows ، لأنظمة LibpCAP.
- تم إهمال winpcap
- نوصي بالتحول إلى libpcaplivedevice
- المصادقة عن بُعد
- إذا كنت تستخدم remoteaUntication ، فقد تم طي بعض الوظائف في هذه الفئة وتغيير واجهة برمجة التطبيقات لإزالة استخدام iCredentials و NetworkCredentials.