PCAP-SAVEFILE(5) File Formats Manual PCAP-SAVEFILE(5)

pcap-savefile - قالب پرونده ذخیرهسازی libpcap

نکته: برنامه‌ها و کتابخانه‌ها باید در صورت امکان از libpcap برای خواندن پرونده‌های ذخیره‌سازی (savefiles) استفاده کنند، به جای آنکه کد اختصاصی خود را برای خواندن پرونده‌های ذخیره‌سازی داشته باشند. اگر در آینده قالب پرونده جدیدی توسط libpcap پشتیبانی شود، برنامه‌ها و کتابخانه‌هایی که از libpcap برای خواندن پرونده‌های ذخیره‌سازی استفاده می‌کنند قادر خواهند بود قالب جدید را بخوانند، اما برنامه‌ها و کتابخانه‌هایی که از کد اختصاصی خود برای خواندن این پرونده‌ها استفاده می‌کنند باید برای پشتیبانی از قالب پرونده جدید تغییر داده شوند.

«پرونده‌های ذخیره‌سازی» (Savefiles) خوانده‌شده و نوشته‌شده توسط libpcap و برنامه‌هایی که از libpcap استفاده می‌کنند، با یک سرایند اختصاصی پرونده (per-file header) آغاز می‌شوند. قالب سرایند پرونده به صورت زیر است:

Magic number
Major version Minor version
Reserved1
Reserved2
Snapshot length
Link-layer header type and additional information

طول سرایند اختصاصی پرونده ۲۴ اوکتت (octet) است.

تمام فیلدهای موجود در سرایند اختصاصی پرونده بر اساس ترتیب بایتی (byte order) میزبان نویسنده پرونده هستند. به طور معمول، نخستین فیلد در سرایند اختصاصی پرونده یک عدد جادویی (magic number) ۴ بایتی با مقدار 0xa1b2c3d4 است. عدد جادویی هنگامی که توسط میزبانی با همان ترتیب بایتی میزبان نویسنده پرونده خوانده شود، مقدار 0xa1b2c3d4 را خواهد داشت و هنگامی که توسط میزبانی با ترتیب بایتی معکوس نسبت به میزبان نویسنده خوانده شود، مقدار 0xd4c3b2a1 را خواهد داشت. این امر به نرم‌افزار خواننده پرونده امکان می‌دهد تا تشخیص دهد که آیا ترتیب بایتی میزبان نویسنده پرونده با ترتیب بایتی میزبانی که پرونده روی آن خوانده می‌شود یکسان است یا خیر، و در نتیجه مشخص شود که آیا مقادیر موجود در سرایندهای پرونده و بسته‌ها نیاز به جابه‌جایی بایتی (byte-swapped) دارند یا خیر.

اگر عدد جادویی دارای مقدار 0xa1b23c4d باشد (که در آن دو نیم‌بایت یا نیبل دو بایت کم‌مرتبه‌تر عدد جادویی جابه‌جا شده‌اند)، که توسط میزبانی با همان ترتیب بایتی میزبان نویسنده پرونده به صورت 0xa1b23c4d و توسط میزبانی با ترتیب بایتی معکوس نسبت به میزبان نویسنده به صورت 0x4d3cb2a1 خوانده خواهد شد، قالب پرونده همانند پرونده‌های معمولی است، با این تفاوت که برچسب‌های زمانی (time stamps) برای بسته‌ها به جای ثانیه و میکروثانیه، بر حسب ثانیه و نانوثانیه داده می‌شوند.

به دنبال این موارد عبارتند از:

یک شماره ۲ بایتی نسخه اصلی (major version) قالب پرونده؛ شماره نسخه فعلی 2 است (مه‌انتهای 0x00 0x02 یا که‌انتهای 0x02 0x00).
یک شماره ۲ بایتی نسخه فرعی (minor version) قالب پرونده؛ شماره نسخه فعلی 4 است (مه‌انتهای 0x00 0x04 یا که‌انتهای 0x04 0x00).
یک فیلد ۴ بایتی استفاده‌نشده - که نویسندگان پرونده pcap بایستی (SHOULD) آن را با 0 پر کنند، و خوانندگان پرونده pcap حتماً باید (MUST) آن را نادیده بگیرند. این مقدار در برخی پیاده‌سازی‌های قدیمی‌تر با عنوان "gmt to local correction" یا "time zone offset" مستند شده بود. برخی از نویسندگان پرونده‌های pcap قدیمی مقادیر غیرصفر را در این فیلد ذخیره می‌کردند.
یک فیلد ۴ بایتی استفاده‌نشده - که نویسندگان پرونده pcap بایستی (SHOULD) آن را با 0 پر کنند، و خوانندگان پرونده pcap حتماً باید (MUST) آن را نادیده بگیرند. این مقدار در برخی پیاده‌سازی‌های قدیمی‌تر با عنوان "accuracy of timestamps" مستند شده بود. برخی از نویسندگان پرونده‌های pcap قدیمی مقادیر غیرصفر را در این فیلد ذخیره می‌کردند.
یک عدد ۴ بایتی که «طول ضبط» (snapshot length یا snaplen) داده‌های ضبط‌شده را مشخص می‌کند؛ بسته‌هایی که طولانی‌تر از طول ضبط باشند، تا حد طول ضبط بریده و کوتاه (truncated) می‌شوند؛ به طوری که اگر طول ضبط برابر با N باشد، تنها N بایت نخست از بسته‌ای که بزرگ‌تر از N بایت است در داده‌های ضبط‌شده ذخیره خواهد شد.
یک عدد ۴ بایتی که نوع سرایند لایه پیوند (link-layer header type) را برای بسته‌های موجود در داده‌های ضبط‌شده و اطلاعات تکمیلی اختیاری مشخص می‌کند.
قالب این فیلد به شرح زیر است:
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|FCS len|R|P|     Reserved3     |        Link-layer type        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
این فیلد به گونه‌ای نمایش داده شده است که گویی در ترتیب بایتی میزبان خواننده یا نویسنده پرونده قرار دارد، به طوری که بیت 0 پرارزش‌ترین بیت فیلد و بیت 31 کم‌ارزش‌ترین بیت فیلد است.
Link-layer type (۱۶ بیت): یک مقدار ۱۶ بیتی که نوع سرایند لایه پیوند را برای بسته‌های موجود در پرونده مشخص می‌کند؛ برای مقادیر LINKTYPE_ که می‌توانند در این فیلد ظاهر شوند، به pcap-linktype(7) مراجعه کنید.
Reserved3 (۱۰ بیت): استفاده نشده - حتماً باید (MUST) توسط نویسندگان pcap برابر با صفر تنظیم شود، و نباید (MUST NOT) توسط خوانندگان pcap تفسیر شود؛ خواننده بایستی (SHOULD) مقدار غیرصفر را به عنوان یک خطا تلقی کند.
P (۱ بیت): بیتی است که در صورت تنظیم بودن (set)، نشان می‌دهد که مقدار طول دنباله وارسی فریم (Frame Check Sequence یا FCS) موجود است و در صورت تنظیم نبودن، نشان می‌دهد که مقدار FCS وجود ندارد.
R (۱ بیت): استفاده نشده - حتماً باید (MUST) توسط نویسندگان pcap برابر با صفر تنظیم شود، و نباید (MUST NOT) توسط خوانندگان pcap تفسیر شود؛ خواننده بایستی (SHOULD) مقدار غیرصفر را به عنوان یک خطا تلقی کند.
FCS len (۴ بیت): یک مقدار بدون علامت ۴ بیتی که تعداد کلمات ۱۶ بیتی (۲ اوکتتی) از FCS را که به هر بسته الحاق شده‌اند (در صورتی که بیت P تنظیم باشد) مشخص می‌کند؛ اگر بیت P تنظیم نشده باشد و طول FCS توسط مقدار نوع لایه پیوند مشخص نشده باشد، طول FCS نامشخص است. مقادیر معتبر فیلد FCS len بین 0 تا 15 است؛ برای مثال، در اترنت (Ethernet) مقدار طول FCS برابر با 2 خواهد بود که متناظر با یک FCS چهار اوکتتی است.

به دنبال سرایند اختصاصی پرونده، صفر یا چند بسته قرار دارند؛ هر بسته با یک سرایند اختصاصی بسته (per-packet header) شروع می‌شود که بلافاصله داده‌های خام بسته به دنبال آن می‌آیند. قالب سرایند اختصاصی هر بسته به شرح زیر است:

Time stamp, seconds value
Time stamp, microseconds or nanoseconds value
Length of captured packet data
Un-truncated length of the packet data

طول سرایند اختصاصی هر بسته ۱۶ اوکتت (octet) است.

تمام فیلدهای موجود در سرایند اختصاصی بسته بر اساس ترتیب بایتی میزبان نویسنده پرونده هستند. سرایند هر بسته با یک برچسب زمانی (timestamp) آغاز می‌شود که زمان تقریبی ضبط بسته را مشخص می‌کند؛ این برچسب زمانی متشکل از یک مقدار ۴ بایتی است که زمان را بر حسب ثانیه از ۱ ژانویه ۱۹۷۰، ساعت 00:00:00 UTC نشان می‌دهد و به دنبال آن یک مقدار ۴ بایتی قرار دارد که زمان را بر حسب میکروثانیه یا نانوثانیه پس از آن ثانیه، بسته به عدد جادویی موجود در سرایند پرونده، مشخص می‌کند. پس از آن یک مقدار ۴ بایتی قرار دارد که تعداد بایت‌های داده‌های ضبط‌شده پس از سرایند بسته را مشخص می‌کند و یک مقدار ۴ بایتی دیگر که بیانگر تعداد بایت‌هایی است که در صورت بریده نشدن بسته با طول ضبط (snapshot length)، در بسته وجود می‌داشت. در صورتی که تعداد بایت‌های داده بسته کمتر یا مساوی با طول ضبط باشد، این دو مقدار طول برابر خواهند بود.

pcap(3PCAP)

6 Jan 2025