در جریان توسعه ابزاری بر پایه tshark، یک نقص فنی در کتابخانه PcapSplitter (بخشی از PcapPlusPlus) شناسایی شد که منجر به حذف بیصدا (Silent Packet Loss) و تخریب فایلهای خروجی در هنگام تحلیل بستهها میگردد.
تحلیل فنی مشکل
این باگ در ماژول FiveTupleSplitter رخ میدهد. زمانی که یک نشست TCP جدید با استفاده از همان 5-tuple (ترکیبی از IP مبدا و مقصد، پورتها و پروتکل) ایجاد شود (مثلاً دریافت یک بسته SYN برای یک هش ثبت شده)، سیستم دچار اختلال میشود. اگرچه بخش مربوط به تخصیص شماره فایل در PcapSplitter به درستی عمل کرده و برای نشست جدید شمارهای مجزا در نظر میگیرد، اما تابع نامگذاری فایل (Filename Function) تنها از IP و پورتها برای ساخت نام فایل استفاده میکند.
پیامدهای عملیاتی
این تضاد در نامگذاری باعث میشود دو نشست مختلف، نام فایل یکسانی دریافت کنند. در نتیجه، زمانی که برنامه با شماره فایلی جدید مواجه میشود، فایل موجود را بدون حالت Append باز کرده و محتویات قبلی را Truncate میکند. این اتفاق منجر به موارد زیر میشود:
- Race Condition: ایجاد رقابت بین دو هندلر نویسنده فایل (File Writer) که به طور همزمان روی یک فایل اثر میگذارند.
- Data Corruption: تخریب ساختار فایلهای PCAP که منجر به خطاهای Total Block Length در ابزارهایی مانند tshark میشود.
- Packet Loss: حذف بخشی از بستهها بدون نمایش هیچگونه خطایی در خروجی (Exit Code 0).
این مشکل در نهایت با شناسایی یک مورد بازتولید (Reproduction) با ۱۳ اتصال شناسایی شد و با اعمال اصلاحاتی در نحوه پسوندگذاری فایلها در هنگام وقوع Collision، توسط توسعهدهندگان کتابخانه رفع و Merge گردید.