| TCPDUMP(8) | System Manager's Manual | TCPDUMP(8) |
نام (NAME)
tcpdump - ابزار تجزیه و تحلیل و شنود بستههای ترافیک شبکه
خلاصه دستور (SYNOPSIS)
tcpdump [ -adeflnNOpqStvx ] [ -c count
] [ -F file ]
[ -i interface ] [ -r file ] [ -s
snaplen ]
[ -T type ] [ -w file ] [ expression ]
توضیحات (DESCRIPTION)
دستور tcpdump هدرهای بستههای روی یک رابط شبکه را که با عبارت بولی expression مطابقت دارند چاپ میکند.
در SunOS با رابط nit یا bpf: برای اجرای tcpdump، باید دسترسی خواندن به /dev/nit یا /dev/bpf* داشته باشید.
در Solaris با dlpi: باید دسترسی خواندن به دستگاه شبهشبکه (network pseudo device) مانند /dev/le داشته باشید.
در HP-UX با dlpi: باید کاربر ریشه (root) باشید یا برنامه بهصورت setuid برای root نصب شده باشد.
در IRIX با snoop: باید کاربر ریشه (root) باشید یا برنامه بهصورت setuid برای root نصب شده باشد.
در Linux: باید کاربر ریشه (root) باشید یا برنامه بهصورت setuid برای root نصب شده باشد.
در Ultrix و Digital UNIX: هنگامی که کاربر ارشد با استفاده از pfconfig(8) حالت بیقیدوشرط (promiscuous-mode) را فعال کند، هر کاربری میتواند tcpdump را اجرا کند.
در BSD: باید دسترسی خواندن به /dev/bpf* داشته باشید.
گزینهها (OPTIONS)
- -a
- تلاش برای تبدیل آدرسهای شبکه و پخش همگانی (broadcast) به نامها.
- -c
- خروج پس از دریافت count بسته.
- -d
- کد کامپایلشدهٔ تطبیق بسته (packet-matching code) را به شکلی خوانا برای انسان به خروجی استاندارد ریخته و متوقف میشود.
- -dd
- کد تطبیق بسته (packet-matching code) را در قالب قطعهکدی از زبان C خروجی میدهد.
- -ddd
- کد تطبیق بسته (packet-matching code) را بهصورت اعداد دهدهی (همراه با تعداد در ابتدا) خروجی میدهد.
- -e
- چاپ هدر لایهٔ پیوند داده (link-level header) در هر سطر خروجی.
- -f
- آدرسهای اینترنتی «خارجی» را بهجای نمادین، بهصورت عددی چاپ میکند (این گزینه برای دور زدن مشکل اساسی سرور yp شرکت Sun به کار میرود — که معمولاً هنگام ترجمهٔ شمارههای شبکهٔ محلی برای همیشه معلق میماند).
- -F
- استفاده از محتوای file بهعنوان عبارت فیلتر. عبارتی که در خط فرمان وارد شده باشد نادیده گرفته میشود.
- -i
- شنود روی رابط شبکهٔ interface. اگر رابطی مشخص نشود، tcpdump در فهرست رابطهای سیستم، رابط فعال و پیکربندیشده با کمترین شماره (بهجز loopback) را جستجو میکند. در صورت وجود گزینههای همرتبه، نخستین مورد انتخاب میشود.
- -l
- بافر کردن
سطری خروجی
استاندارد.
زمانی که
میخواهید
دادهها را
همزمان با
ضبط مشاهده
کنید
کاربرد
دارد؛ برای
نمونه:
``tcpdump -l | tee dat'' یا ``tcpdump -l > dat & tail -f dat''. - -n
- عدم تبدیل آدرسها (مانند آدرسهای میزبان، شماره پورتها و غیره) به نام.
- -N
- عدم چاپ بخش دامنه در نامهای میزبان. برای نمونه، با فعال بودن این گزینه، tcpdump بهجای ``nic.ddn.mil'' عبارت ``nic'' را چاپ میکند.
- -O
- عدم اجرای بهینهساز کد تطبیق بسته. این گزینه تنها زمانی کاربرد دارد که به وجود اشکالی در بهینهساز مشکوک باشید.
- -p
- عدم قرار دادن رابط شبکه در حالت بیقیدوشرط (promiscuous mode). توجه داشته باشید که ممکن است رابط شبکه به دلایل دیگری در این حالت باشد؛ بنابراین، گزینهٔ -p نمیتواند بهعنوان مخففی برای `ether host {local-hw-addr} or ether broadcast' به کار رود.
- -q
- خروجی سریع و کوتاه؛ اطلاعات کمتری از پروتکلها چاپ میشود تا سطرهای خروجی کوتاهتر باشند.
- -r
- خواندن بستهها از file (که پیشتر با گزینهٔ -w ایجاد شده است). اگر مقدار file برابر ``-'' باشد، دادهها از ورودی استاندارد خوانده میشوند.
- -s
- دریافت snaplen بایت داده از هر بسته بهجای مقدار پیشفرض ۶۸ بایت (در NIT سیستمعامل SunOS، حداقل مقدار در عمل ۹۶ است). مقدار ۶۸ بایت برای پروتکلهای IP، ICMP، TCP و UDP کافی است، اما ممکن است اطلاعات پروتکل مربوط به سرورهای نام (DNS) و بستههای NFS را ناقص کند (به بخشهای بعد مراجعه کنید). بستههایی که به دلیل عکسبرداری محدود بریده شدهاند، در خروجی با علامت ``[|proto]'' مشخص میشوند که در آن proto نام لایهٔ پروتکلی است که برش در آن رخ داده است. توجه داشته باشید که بزرگتر کردن اندازهٔ ضبط، هم زمان پردازش بستهها را افزایش میدهد و هم بافرینگ بستهها را کاهش میدهد که ممکن است باعث از دست رفتن بستهها شود. شما باید snaplen را تا حد امکان کوچک انتخاب کنید، به طوری که تنها اطلاعات پروتکل مورد نیاز شما را در بر گیرد.
- -T
- وادار ساختن بستههای انتخابشده توسط "expression" به تفسیر به عنوان نوع مشخصشدهٔ type. انواع شناختهشده در حال حاضر عبارتند از: rpc (فراخوانی رویه از راه دور - Remote Procedure Call)، rtp (پروتکل کاربردهای بیدرنگ - Real-Time Applications protocol)، rtcp (پروتکل کنترل کاربردهای بیدرنگ - Real-Time Applications control protocol)، vat (ابزار صوتی تصویری - Visual Audio Tool) و wb (تختهسفید توزیعشده - distributed White Board).
- -S
- نمایش شماره توالیهای مطلق به جای شماره توالیهای نسبی TCP.
- -t
- عدم چاپ برچسب زمانی روی هر سطر خروجی.
- -tt
- چاپ برچسب زمانی بدون قالببندی (ثانیههای خام) روی هر سطر خروجی.
- -v
- خروجی با جزئیات بیشتر (verbose). برای نمونه، زمان حیات (TTL) و نوع سرویس (TOS) در بستهٔ IP نمایش داده میشوند.
- -vv
- خروجی با جزئیات حتی بیشتر. برای نمونه، فیلدهای اضافی بستههای پاسخ NFS چاپ میشوند.
- -w
- نوشتن بستههای خام در file بهجای تجزیه و نمایش آنها. بعداً میتوان آنها را با گزینهٔ -r نمایش داد. اگر مقدار file برابر ``-'' باشد، بستهها در خروجی استاندارد نوشته میشوند.
- -x
- چاپ هر بسته (منهای هدر لایهٔ پیوند آن) به صورت هگزادسیمال. مقدار کمتر بین کل بسته یا snaplen بایت چاپ خواهد شد.
عبارت expression از یک یا چند شناسه اولیه (primitive) تشکیل شده است. یک شناسه اولیه معمولاً از یک شناسه (id) (نام یا شماره)، و یک یا چند توصیفکننده (qualifier) پیش از آن تشکیل میشود. سه نوع مختلف توصیفکننده وجود دارد:
- type
- توصیفکنندههای نوع (type) مشخص میکنند که نام یا شمارهٔ شناسه به چه چیزی اشاره دارد. انواع ممکن عبارتند از: host، net و port. برای نمونه: `host foo'، `net 128.3'، `port 20'. اگر توصیفکنندهٔ نوع مشخص نشود، مقدار پیشفرض host در نظر گرفته میشود.
- dir
- توصیفکنندههای جهت (dir) جهت انتقال داده را نسبت به شناسه مشخص میکنند (اینکه داده به سمت شناسه میرود یا از آن میآید). جهتهای ممکن عبارتند از: src، dst، src or dst و src and dst. برای نمونه: `src foo'، `dst net 128.3'، `src or dst port ftp-data'. اگر توصیفکنندهٔ جهت مشخص نشود، مقدار پیشفرض src or dst است. برای لایههای پیوند «تهی» (null) (مانند پروتکلهای نقطهبهنقطه نظیر slip)، توصیفکنندههای inbound و outbound جهت انتقال مورد نظر را مشخص میکنند.
- proto
- توصیفکنندههای پروتکل (proto) تطبیق را به یک پروتکل خاص محدود میکنند. پروتکلهای ممکن عبارتند از: ether، fddi، ip، arp، rarp، decnet، lat، sca، moprc، mopdl، tcp و udp. برای نمونه: `ether src foo'، `arp net 128.3'، `tcp port 21'. اگر توصیفکنندهٔ پروتکل مشخص نشود، تمام پروتکلهای سازگار با آن نوع فرض میشوند؛ برای نمونه: `src foo' به معنای `(ip or arp or rarp) src foo' است (توجه کنید که این نمونه برای نشان دادن مفهوم است و از نظر دستوری معتبر نیست)، `net bar' به معنای `(ip or arp or rarp) net bar' و `port 53' به معنای `(tcp or udp) port 53' است.
[fddi در واقع یک نام مستعار برای ether است؛ تحلیلگر با هر دو بهصورت یکسان به عنوان «لایهٔ پیوند دادهٔ مورد استفاده در رابط شبکهٔ مشخصشده» رفتار میکند. هدرهای FDDI شامل آدرسهای مبدأ و مقصد مشابه اترنت هستند و معمولاً انواع بستهای مشابه اترنت دارند، بنابراین میتوانید روی این فیلدهای FDDI درست مانند فیلدهای اترنت فیلتر بگذارید. هدرهای FDDI شامل فیلدهای دیگری نیز هستند، اما نمیتوانید آنها را بهطور صریح در عبارت فیلتر نام ببرید.]
علاوه بر موارد فوق، کلمات کلیدی ویژهای برای «شناسههای اولیه» وجود دارند: gateway، broadcast، less، greater و عبارات ریاضی. این موارد از الگوی بالا پیروی نمیکنند و در ادامه شرح داده شدهاند.
عبارات فیلتر پیچیدهتر را میتوان با ترکیب شناسههای اولیه با استفاده از کلمات and، or و not ایجاد کرد؛ برای نمونه: `host foo and not port ftp and not port ftp-data'. برای کاهش تایپ، میتوان توصیفکنندههای تکراری را حذف کرد؛ برای نمونه: `tcp dst port ftp or ftp-data or domain' دقیقاً معادل است با: `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain'.
شناسههای اولیه مجاز عبارتند از:
- dst host host
- اگر فیلد مقصد IP بسته برابر با host باشد، نتیجه درست است. host میتواند یک آدرس یا یک نام میزبان باشد.
- src host host
- اگر فیلد مبدأ IP بسته برابر با host باشد، نتیجه درست است.
- host host
- اگر مبدأ یا
مقصد IP بسته
برابر با host
باشد،
نتیجه درست
است. به هر
یک از
عبارات host
بالا
میتوان
پیشوند
کلمات
کلیدی ip، arp
یا rarp را
اضافه کرد،
مانند:
ip host host
که معادل است با:
ether proto \ip and host host
اگر host نام میزبانی با چندین آدرس IP باشد، هر یک از آدرسهای آن بررسی میشود. - ether dst ehost
- اگر آدرس اترنت مقصد بسته برابر با ehost باشد، نتیجه درست است. Ehost میتواند یک نام (از فایل /etc/ethers) یا یک شماره باشد (برای ساختار شمارهها به ethers(3N) مراجعه کنید).
- ether src ehost
- اگر آدرس اترنت مبدأ بسته برابر با ehost باشد، نتیجه درست است.
- ether host ehost
- اگر آدرس اترنت مبدأ یا مقصد بسته برابر با ehost باشد، نتیجه درست است.
- gateway host
- اگر بسته از
host
بهعنوان
دروازه (gateway)
استفاده
کرده باشد،
نتیجه درست
است؛ به این
معنی که
آدرس اترنت
مبدأ یا
مقصد بسته
برابر با host
است، اما
هیچیک از
آدرسهای IP
مبدأ یا
مقصد host
نیستند. host
باید یک نام
میزبان
باشد و باید
در هر دو
فایل /etc/hosts و /etc/ethers
موجود باشد
(یک عبارت
معادل:
ether host ehost and not host host
است که در آن host / ehost میتواند نام یا شماره باشد). - dst net net
- اگر آدرس IP مقصد بسته متعلق به شبکهٔ net باشد، نتیجه درست است. net میتواند یک نام (از /etc/networks) یا یک شماره شبکه باشد (برای جزئیات به networks(4) مراجعه کنید).
- src net net
- اگر آدرس IP مبدأ بسته متعلق به شبکهٔ net باشد، نتیجه درست است.
- net net
- اگر آدرس IP مبدأ یا مقصد بسته متعلق به شبکهٔ net باشد، نتیجه درست است.
- net net mask mask
- اگر آدرس IP با ماسک شبکهٔ مشخصشده در net مطابقت داشته باشد، نتیجه درست است. میتوان این شناسه را با src یا dst ترکیب کرد.
- net net/len
- اگر آدرس IP با ماسک شبکهٔ با طول len بیت از net مطابقت داشته باشد، نتیجه درست است. میتوان این شناسه را با src یا dst ترکیب کرد.
- dst port port
- اگر بسته از نوع ip/tcp یا ip/udp بوده و پورت مقصد آن port باشد، نتیجه درست است. port میتواند یک عدد یا نام مشخصشده در /etc/services باشد (به tcp(4P) و udp(4P) مراجعه کنید). اگر از یک نام استفاده شود، هم شماره پورت و هم پروتکل بررسی میشوند. اگر از یک عدد یا یک نام دارای ابهام استفاده شود، تنها شماره پورت بررسی میشود (برای نمونه، dst port 513 دادههای tcp/login و udp/who را نمایش میدهد، و port domain دادههای tcp/domain و udp/domain را نمایش میدهد).
- src port port
- اگر شماره پورت مبدأ بسته برابر با port باشد، نتیجه درست است.
- port port
- اگر پورت
مبدأ یا
مقصد بسته
برابر با port
باشد،
نتیجه درست
است. هر یک
از عبارات
پورت بالا
میتوانند
با کلمات
کلیدی tcp یا
udp
پیشوندگذاری
شوند،
مانند:
tcp src port port
که تنها با بستههای TCP با پورت مبدأ port مطابقت دارد. - less length
- اگر طول
بسته کمتر
یا مساوی length
باشد،
نتیجه درست
است؛ معادل
با:
len <= length.
- greater length
- اگر طول
بسته
بزرگتر یا
مساوی length
باشد،
نتیجه درست
است؛ معادل
با:
len >= length.
- ip proto protocol
- اگر بسته یک بستهٔ IP باشد (به ip(4P) مراجعه کنید) که نوع پروتکل آن protocol است، نتیجه درست است. Protocol میتواند یک عدد یا یکی از نامهای زیر باشد: icmp، igrp، udp، nd یا tcp. توجه داشته باشید که شناسههای tcp، udp و icmp همچنین کلمات کلیدی هستند، بنابراین باید با یک بکاسلش (\) اسکیپ شوند، که در C-shell باید بهصورت \\ باشد.
- ether broadcast
- اگر بسته یک بستهٔ پخش همگانی اترنت باشد، نتیجه درست است. کلمهٔ کلیدی ether اختیاری است.
- ip broadcast
- اگر بسته یک بستهٔ پخش همگانی IP باشد، نتیجه درست است. دستور Tcpdump قراردادهای پخش همگانی همهصفر و همهیک را بررسی کرده و ماسک زیرشبکهٔ محلی را نیز اعمال میکند.
- ether multicast
- اگر بسته یک بستهٔ چندپخشی اترنت (multicast) باشد، نتیجه درست است. کلمهٔ کلیدی ether اختیاری است؛ این عبارت در واقع کوتاهشدهٔ `ether[0] & 1 != 0' است.
- ip multicast
- اگر بسته یک بستهٔ چندپخشی IP باشد، نتیجه درست است.
- ether proto protocol
- اگر پروتکل بسته متعلق به نوع اترنت protocol باشد، نتیجه درست است. Protocol میتواند یک عدد یا یک نام مانند ip، arp یا rarp باشد. توجه داشته باشید که این شناسهها کلمات کلیدی نیز هستند، بنابراین باید با یک بکاسلش (\) اسکیپ شوند. [در صورت استفاده از FDDI (مانند `fddi protocol arp')، شناسایی پروتکل از هدر کنترل پیوند منطقی 802.2 (LLC) ناشی میشود که معمولاً در بالای هدر FDDI قرار دارد. هنگام فیلتر کردن بستهها بر اساس شناسهٔ پروتکل، tcpdump فرض میکند که تمام بستههای FDDI شامل هدر LLC هستند و این هدر در قالب SNAP است.]
- decnet src host
- اگر آدرس مبدأ DECNET برابر با host باشد، نتیجه درست است؛ که ممکن است به شکل ``10.123'' یا یک نام میزبان DECNET باشد. [تنها سیستمهای Ultrix که برای اجرای DECNET پیکربندی شدهاند از نامهای میزبان DECNET پشتیبانی میکنند.]
- decnet dst host
- اگر آدرس مقصد DECNET برابر با host باشد، نتیجه درست است.
- decnet host host
- اگر آدرس مبدأ یا مقصد DECNET برابر با host باشد، نتیجه درست است.
- ip, arp, rarp, decnet
- کوتاهشدهٔ
عبارت:
ether proto p
است که در آن p یکی از پروتکلهای یادشده است. - lat, moprc, mopdl
- کوتاهشدهٔ
عبارت:
ether proto p
است که در آن p یکی از پروتکلهای یادشده است. توجه داشته باشید که tcpdump در حال حاضر نحوهٔ تجزیه و تحلیل این پروتکلها را نمیداند. - tcp, udp, icmp
- کوتاهشدهٔ
عبارت:
ip proto p
است که در آن p یکی از پروتکلهای یادشده است. - expr relop expr
- اگر این
رابطه
برقرار
باشد،
نتیجه درست
است؛ که در
آن relop یکی از
عملگرهای
>، <، >=، <=، =، !=
است و expr یک
عبارت
محاسباتی
تشکیلشده
از
ثابتهای
صحیح (به
قالب
استاندارد
C)،
عملگرهای
دودویی
معمول [+, -, *, /, &, |]،
یک عملگر
طول بسته، و
عملگرهای
دسترسی به
دادههای
بسته است.
برای
دسترسی به
دادههای
درون بسته،
از ساختار
نحوی زیر
استفاده
کنید:
proto [ expr : size ]
که در آن proto یکی از موارد ether, fddi, ip, arp, rarp, tcp, udp, یا icmp است و لایهٔ پروتکل برای عملیات اندیسگذاری را مشخص میکند. expr آفست بایت را نسبت به لایهٔ پروتکل مشخصشده نشان میدهد. size اختیاری است و تعداد بایتهای مورد نظر را مشخص میکند؛ میتواند 1، 2 یا 4 باشد و پیشفرض آن 1 بایت است. عملگر طول که با کلمهٔ کلیدی len مشخص میشود، طول کل بسته را نشان میدهد.برای نمونه، `ether[0] & 1 != 0' تمامی بستههای چندپخشی را دریافت میکند. عبارت `ip[0] & 0xf != 5' تمام بستههای IP دارای فیلدهای اختیاری را دریافت میکند. عبارت `ip[6:2] & 0x1fff = 0' تنها دادههای قطعهبندینشده و بستههای با آفست قطعه صفر را دریافت میکند. این بررسی بهطور ضمنی در عملیات اندیسگذاری tcp و udp اعمال میشود؛ برای نمونه، tcp[0] همیشه نخستین بایت از هدر TCP است و هرگز اولین بایت یک قطعهٔ IP میانی نیست.
شناسههای اولیه را میتوان با روشهای زیر ترکیب کرد:
- گروهی از شناسهها و عملگرها محصور در پرانتز (پرانتزها در پوسته کاراکترهای ویژه هستند، بنابراین باید اسکیپ شوند).
- عمل نقیض (`!' یا `not').
- عمل عطف منطقی (`&&' یا `and').
- عمل فصل منطقی (`||' یا `or').
عمل نقیض بالاترین اولویت را دارد. عمل فصل و عمل عطف اولویت یکسانی دارند و ارزیابی آنها از چپ به راست انجام میشود. توجه داشته باشید که عمل عطف نیاز به عملگر صریح and دارد و قرار گرفتن در کنار هم کافی نیست.
اگر
شناسهای
بدون کلمهٔ
کلیدی وارد
شود، کلمهٔ
کلیدی
اخیراً
استفادهشده
فرض
میشود؛
برای نمونه:
not host vs and aceکوتاهشدهٔ عبارت:
not host vs and host aceاست، و نباید با عبارت:
not ( host vs or ace )اشتباه گرفته شود.
آرگومانهای عبارت فیلتر را میتوان بهصورت یک آرگومان منفرد یا بهصورت چند آرگومان به tcpdump ارسال کرد که دومی معمولاً راحتتر است. بهطور کلی، اگر عبارت شامل نویسههای کنترلی (metacharacters) پوسته باشد، ارسال آن بهعنوان یک آرگومان محصور در نقلقول سادهتر خواهد بود. چند آرگومان پیش از تجزیه، با فاصله به هم متصل میشوند.
مثالها (EXAMPLES)
نمایش تمامی بستههای ورودی یا خروجی از میزبان sundown:
tcpdump host sundown
نمایش ترافیک بین helios و هر یک از میزبانهای hot یا ace:
tcpdump host helios and \( hot or ace \)
نمایش تمامی بستههای IP بین ace و همهٔ میزبانها بهجز helios:
tcpdump ip host ace and not helios
نمایش تمامی دادههای شبکه بین میزبانهای محلی و میزبانهای Berkeley:
tcpdump net ucb-ether
نمایش تمامی بستههای ftp عبوری از دروازهٔ snup (توجه داشته باشید که این عبارت برای جلوگیری از تفسیر پرانتزها توسط پوسته، در نقلقول تکی محصور شده است):
tcpdump 'gateway snup and (port ftp or ftp-data)'
نمایش ترافیکی که نه از میزبان محلی نشأت گرفته و نه به مقصد آن ارسال میشود (اگر بستهها از طریق یک دروازه وارد شبکهٔ دیگری شوند، هرگز به شبکهٔ محلی شما نخواهند رسید):
tcpdump ip and not net localnet
نمایش بستههای شروع و پایان هر نشست TCP (بستههای SYN و FIN) که یکی از طرفین آن یک میزبان دوردست باشد:
tcpdump 'tcp[13] & 3 != 0 and not src and dst net localnet'
نمایش بستههای IP عبوری از دروازهٔ snup که بزرگتر از ۵۷۶ بایت هستند:
tcpdump 'gateway snup and ip[2:2] > 576'
نمایش بستههای پخش همگانی یا چندپخشی IP که نه بهصورت پخش همگانی اترنت و نه چندپخشی اترنت ارسال شدهاند:
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
نمایش تمامی بستههای ICMP که از نوع درخواست/پاسخ echo نیستند (یعنی بستههای پینگ نیستند):
tcpdump 'icmp[0] != 8 and icmp[0] != 0'
قالب خروجی (OUTPUT FORMAT)
قالب خروجی tcpdump به پروتکل بستگی دارد. در ادامه شرح کوتاهی از بیشتر قالبها و مثالهایی از آنها آورده شده است.
هدرهای لایه پیوند (Link Level Headers)
اگر گزینهٔ '-e' مشخص شود، هدرهای لایهٔ پیوند چاپ میشوند.
روی اترنت، آدرسهای مبدأ و مقصد، پروتکل و طول بسته نمایش داده میشوند.
روی شبکههای FDDI، گزینهٔ '-e' باعث میشود که tcpdump فیلد «کنترل فریم (frame control)»، آدرسهای مبدأ و مقصد و طول بسته را نمایش دهد (فیلد «کنترل فریم» تفسیر بخشهای باقیماندهٔ بسته را تعیین میکند. بستههای معمولی، مانند آنهایی که حامل دادههای IP هستند، بستههای «ناهمگام (async)» با اولویت بین ۰ تا ۷ هستند؛ برای نمونه: `async4`. فرض میشود که این بستهها حامل بستهٔ کنترل پیوند منطقی 802.2 (LLC) هستند؛ اگر بستهها دادههای ISO یا بهاصطلاح بستهٔ SNAP نباشند، هدر LLC نمایش داده میشود).
(توجه: در توضیحات زیر فرض میشود که با الگوریتم فشردهسازی SLIP شرح داده شده در RFC-1144 آشنایی دارید.)
روی پیوندهای SLIP، دستور tcpdump جهت ارسال (``I'' برای ورودی یا inbound، و ``O'' برای خروجی یا outbound)، نوع بسته و اطلاعات فشردهسازی را چاپ میکند. ابتدا نوع بسته چاپ میشود؛ سه نوع بسته وجود دارد: ip، utcp و ctcp. برای بستههای ip اطلاعات پیوند بیشتری نمایش داده نمیشود. برای بستههای TCP، پس از نوع، شناسهٔ اتصال چاپ میشود. اگر بسته فشرده شده باشد، هدر کدگذاریشدهٔ آن نمایش داده میشود. این حالتهای ویژه به شکل *S+n و *SA+n نمایش داده میشوند که در آنها n میزان کل تغییر در شماره توالی (یا شماره توالی و ack) است. اگر حالت ویژهای نباشد، صفر یا چند تغییر نمایش داده میشود. تغییر با یکی از حروف U (اشارهگر فوری)، W (پنجره)، A (تأییدیه یا ack)، S (شماره توالی) و I (شناسه بسته) مشخص شده و پس از آن یک مقدار تغییر (+n یا -n) یا یک مقدار جدید (=n) قرار میگیرد. در پایان، مقدار کل دادههای درون بسته و طول هدر فشرده نمایش داده میشود.
برای نمونه، سطر زیر یک بستهٔ فشردهٔ خروجی TCP را با شناسهٔ اتصال ضمنی نشان میدهد؛ تغییر مقدار تأییدیه (ack) برابر با ۶ است، شماره توالی ۴۹ واحد و شناسه بسته ۶ واحد افزایش یافته است؛ سه بایت داده و شش بایت هدر فشرده وجود دارد:
O ctcp * A+6 S+49 I+6 3 (6)
بستههای ARP/RARP
خروجی بستههای arp/rarp شامل نوع درخواست و پارامترهای آن است. قالب خروجی تا حد زیادی خودتوضیح است. در اینجا نمونهٔ سادهای از شروع یک نشست 'rlogin' از میزبان rtsg به میزبان csam آورده شده است:
arp who-has csam tell rtsg arp reply csam is-at CSAM
اگر با tcpdump -n مشاهده شود، خروجی واضحتر خواهد بود:
arp who-has 128.3.254.6 tell 128.3.254.68 arp reply 128.3.254.6 is-at 02:07:01:00:01:c4
اگر از tcpdump -e استفاده شود، مشخص میشود که بستهٔ اول یک پخش همگانی (broadcast) و بستهٔ دوم نقطهبهنقطه است:
RTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM
بستههای TCP
(توجه: در توضیحات زیر فرض میشود که با پروتکل TCP شرح داده شده در RFC-793 آشنایی دارید؛ اگر با این پروتکل آشنا نیستید، نه این متن و نه tcpdump فایدهٔ چندانی برای شما نخواهند داشت.)
بهطور کلی، قالب خروجی پروتکل tcp به صورت زیر است:
src > dst: flags data-seqno ack window urgent options
فیلدهای src, dst و flags همواره وجود دارند. سایر فیلدها بسته به محتوای هدر tcp بسته، تنها در صورت نیاز چاپ میشوند.
در ادامه بخش ابتدایی یک اتصال rlogin از میزبان rtsg به میزبان csam آورده شده است:
rtsg.1023 > csam.login: S 768512:768512(0) win 4096 <mss 1024> csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024> rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1
میزبان Csam پاسخی با قالبی مشابه میدهد، با این تفاوت که یک تأییدیهٔ سوارشده برای SYN مربوط به rtsg به آن اضافه شده است. سپس Rtsg بستهٔ SYN مربوط به csam را تأیید میکند. علامت `.' به معنی عدم تنظیم هیچ پرچمی است. این بسته حاوی داده نیست، بنابراین فاقد شماره توالی داده است. توجه داشته باشید که این شماره توالی تأییدیه یک عدد صحیح کوچک (1) است. هنگامی که tcpdump برای نخستین بار یک گفتگوی tcp را میبیند، شماره توالی موجود در بسته را نمایش میدهد. در بستههای بعدی همان گفتگو، تفاوت شماره توالی بستهٔ فعلی با آن بستهٔ نخستین را چاپ میکند. این به این معنی است که از بستهٔ اول به بعد، شماره توالیها را میتوان به عنوان آفست نسبی در جریان داده در نظر گرفت (که در آن نخستین بایت دادهٔ هر گفتگو از عدد '1' شمارهگذاری میشود). گزینهٔ `-S' این رفتار را تغییر داده و شماره توالیهای خام را مستقیماً چاپ میکند.
در سطر ششم، rtsg مقدار ۱۹ بایت داده (بایتهای ۲ تا ۲۰) را به csam ارسال میکند. پرچم PUSH در بسته تنظیم شده است. در سطر هفتم csam اعلام میکند که دادههای ارسالشده توسط rtsg را تا بایت ۲۱ دریافت کرده است، اما خود بایت ۲۱ را شامل نمیشود. بیشتر دادهها آشکارا در بافر سوکت قرار دارند، زیرا اندازهٔ پنجرهٔ دریافت csam کمتر از ۱۹ بایت شده است. همزمان csam یک بایت داده برای rtsg میفرستد. سطرهای هشتم و نهم نشان میدهند که csam دو بایت دادهٔ فوری را برای rtsg ارسال میکند.
اگر محدودهٔ ضبط آنقدر کوچک تنظیم شده باشد که tcpdump نتواند هدر کامل TCP را ضبط کند، تا حد امکان بخش ضبطشده را تفسیر کرده و سپس ``[|tcp]'' را نمایش میدهد تا نشان دهد باقیمانده قابل تفسیر نیست. اگر هدر حاوی گزینهای نادرست باشد (طول گزینه بسیار کوچک باشد یا از محدودهٔ هدر فراتر رود)، tcpdump عبارت ``[bad opt]'' را نمایش داده و تفسیر گزینههای بعدی را متوقف میکند. اگر طول هدر نشاندهندهٔ وجود گزینهها باشد اما طول دیتاگرام IP برای نگهداری واقعی گزینهها کافی نباشد، عبارت ``[bad hdr length]'' نمایش داده میشود.
بستههای UDP
قالب UDP مانند نمونهٔ زیر از یک بستهٔ rwho است:
actinide.who > broadcast.who: udp 84
برخی از سرویسهای UDP را میتوان (از روی شماره پورتهای مبدأ یا مقصد) شناسایی کرد و اطلاعات پروتکلهای لایههای بالاتر را نمایش داد؛ بهویژه درخواستهای سرویسدهندهٔ نام دامنه (RFC-1034/1035) و فراخوانیهای RPC برای NFS (RFC-1050).
درخواستهای سرویسدهنده نام UDP (Name Server Requests)
(توجه: در توضیحات زیر فرض میشود که با پروتکل سرویسدهندهٔ نام شرح داده شده در RFC-1035 آشنایی دارید. اگر با این پروتکل آشنا نیستید، مطالب زیر ممکن است نامفهوم به نظر برسند.)
قالب درخواستهای سرویسدهندهٔ نام به صورت زیر است:
src > dst: id op? flags qtype qclass name (len)
h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
دستور Tcpdump برخی شرایط غیرعادی را بررسی میکند و نتایج مربوطه را درون کروشهها نمایش میدهد: اگر یک پرسوجو شامل بخشهای پاسخ، سرویسدهندهٔ نام یا اختیارات باشد، فیلدهای ancount، nscount یا arcount به صورت `[na]'، `[nn]' یا `[nau]' نمایش داده میشوند که در آنها n تعداد مربوطه است. اگر در بایتهای دوم و سوم، هر یک از بیتهای پاسخ (AA، RA یا rcode) یا هر یک از بیتهای «باید صفر باشد» تنظیم شده باشند، عبارت `[b2&3=x]' نمایش داده میشود که در آن x مقدار هگزادسیمال بایتهای دوم و سوم هدر است.
پاسخهای سرویسدهنده نام UDP
قالب پاسخهای سرویسدهندهٔ نام به صورت زیر است:
src > dst: id op rcode flags a/n/au type class data (len) helios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)
در مثال دوم، helios به پرسوجوی شناسهٔ ۲ با وضعیت دامنه وجود ندارد (NXDomain)، بدون هیچ رکورد پاسخ، ۱ رکورد سرویسدهندهٔ نام، و بدون رکورد اختیارات پاسخ میدهد. علامت `*' نشان میدهد که پرچم پاسخ معتبر (authoritative answer) تنظیم شده است. به دلیل عدم وجود رکورد پاسخ، فیلدهای type، class و data نمایش داده نمیشوند.
سایر نویسههای پرچم میتوانند به صورت `-' (عدم تنظیم بازگشت در دسترس است - RA) و `|' (تنظیم برش پیام - TC) نمایش داده شوند. اگر بخش «سوال» فاقد محتوای معتبر باشد، عبارت `[nq]' چاپ میشود.
توجه داشته باشید که پرسوجوها و پاسخهای سرویسدهندهٔ نام معمولاً بزرگ هستند و ممکن است مقدار پیشفرض ۶۸ بایت برای snaplen نتواند محتوای کافی از بسته را ضبط کند. اگر قصد بررسی دقیق ترافیک سرویسدهندهٔ نام را دارید، از گزینهٔ -s برای افزایش بافر ضبط استفاده کنید؛ گزینهٔ `-s 128' مناسب خواهد بود.
درخواستها و پاسخهای NFS
قالب نمایش درخواستها و پاسخهای Sun NFS (سیستم فایل شبکهای) به صورت زیر است:
src.xid > dst.nfs: len op args src.nfs > dst.xid: reply stat len op results sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150
در سطر سوم، sushi از wrl میخواهد که فایل `xcolors' را در دایرکتوری با دستگیرهٔ 9,74/4096.6878 جستجو کند. توجه داشته باشید که قالب دادهها به نوع عملیات بستگی دارد و ساختار آن خودتوضیح است.
مشخص کردن گزینهٔ -v (پرگویی) اطلاعات تکمیلی را نمایش میدهد؛ برای نمونه:
sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388
اگر یک گزینهٔ -v دیگر نیز داده شود (-vv)، جزئیات حتی بیشتری چاپ میشود.
توجه داشته باشید که دادههای درخواستهای NFS بسیار حجیم هستند و اگر مقدار snaplen افزایش نیابد، بسیاری از جزئیات نمایش داده نخواهند شد؛ گزینهٔ `-s 192' را امتحان کنید.
بستههای پاسخ NFS بهطور صریح نوع عملیات RPC را مشخص نمیکنند. بنابراین، tcpdump رکوردی از درخواستهای «اخیر» را نگه میدارد و بر اساس شناسهٔ تراکنش، پاسخها را با درخواستها تطبیق میدهد. اگر بستهٔ پاسخی فاقد بستهٔ درخواست متناظر باشد، امکان تجزیه و تحلیل آن وجود نخواهد داشت.
پروتکل KIP Appletalk (پروتکل DDP روی UDP)
بستههای Appletalk DDP درون دیتاگرامهای UDP بستهبندی میشوند و پس از خارج شدن از بسته، مانند بستههای DDP چاپ میشوند (یعنی تمام اطلاعات هدر UDP نادیده گرفته میشود). فایل /etc/atalk.names برای ترجمهٔ شمارههای شبکه و گره appletalk به نامها به کار میرود. قالب سطرهای این فایل به صورت زیر است:
number name 1.254 ether 16.1 icsd-net 1.254.110 ace
آدرسهای Appletalk با این قالب نمایش داده میشوند:
net.host.port 144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2
دستور Tcpdump میتواند محتوای بستههای NBP (پروتکل اتصال نام) و ATP (پروتکل تراکنش Appletalk) را ترجمه کند. برای سایر پروتکلها تنها نام پروتکل (یا شماره آن در صورتی که نامی برای آن ثبت نشده باشد) و اندازهٔ بسته چاپ میشود.
قالب خروجی بستههای NBP شبیه به نمونههای زیر است:
icsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186
قالب بستههای ATP در مثال زیر نشان داده شده است:
jssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002
میزبان Helios با ۸ بستهٔ ۵۱۲ بایتی پاسخ میدهد. مقدار `:digit' که پس از شمارهٔ تراکنش میآید، شماره توالی بسته در تراکنش را نشان میدهد، و عدد داخل پرانتز مقدار دادههای بسته بدون احتساب هدر atp است. علامت `*' در بستهٔ ۷ نشان میدهد که بیت EOM تنظیم شده است.
سپس Jssmag.209 درخواست ارسال مجدد بستههای ۳ و ۵ را میکند. پس از ارسال مجدد توسط helios، میزبان jssmag.209 این تراکنش را خاتمه میدهد. در نهایت، jssmag.209 درخواست تراکنش بعدی را ارسال میکند. علامت `*' در درخواست نشان میدهد که بیت XO (دقیقاً یکبار - exactly once) تنظیم نشده است.
قطعهبندی IP (IP Fragmentation)
دیتاگرامهای قطعهبندیشدهٔ اینترنت به صورت زیر نمایش داده میشوند:
(frag id:size@offset+) (frag id:size@offset)
فیلد id شناسهٔ قطعه است. size اندازهٔ قطعه (بر حسب بایت) بدون احتساب هدر IP است. offset آفست این قطعه (بر حسب بایت) در دیتاگرام اصلی است.
اطلاعات مربوط به هر قطعه چاپ میشود. قطعهٔ نخست شامل هدرهای پروتکل سطح بالاتر است، بنابراین پس از اطلاعات پروتکل، اطلاعات قطعه چاپ میشود. قطعات پس از قطعهٔ نخست فاقد هدرهای پروتکلهای سطح بالا هستند، بنابراین پس از آدرسهای مبدأ و مقصد تنها اطلاعات قطعه نمایش داده میشود. برای نمونه، در ادامه بخشی از یک انتقال ftp از arizona.edu به lbl-rtsg.arpa آورده شده است که به نظر میرسد CSNET در مسیر قادر به مدیریت دیتاگرامهای ۵۷۶ بایتی نبوده است:
arizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560
اگر بسته دارای پرچم IP قطعهبندی نشود (Don't Fragment) باشد، عبارت (DF) در انتهای سطر چاپ میشود.
برچسبهای زمانی (Timestamps)
بهطور پیشفرض، پیش از تمام سطرهای خروجی یک برچسب زمانی درج میشود. برچسب زمانی همان زمان فعلی است و قالب نمایش آن به صورت زیر است:
hh:mm:ss.frac
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA.
نسخهٔ فعلی را میتوان از طریق ftp ناشناس دریافت کرد:
باگها (BUGS)
لطفاً گزارش اشکالات را به آدرس tcpdump@ee.lbl.gov ارسال کنید.
رابط NIT اجازه نمیدهد ترافیک خروجی خودتان را شنود کنید، اما BPF این امکان را میدهد. ما استفاده از دومی را پیشنهاد میکنیم.
باید تلاشی برای بازترکیب (reassemble) قطعات IP انجام شود، یا حداقل طول صحیح برای پروتکلهای لایههای بالاتر محاسبه شود.
پرسوجوهای معکوس سرویسدهندهٔ نام بهدرستی چاپ نمیشوند: بخش پرسش (خالی) چاپ میشود، در حالی که پرسوجوی واقعی در بخش پاسخ قرار دارد. برخی بر این باورند که این پرسوجوهای معکوس خود یک اشکال هستند و برنامهای که آنها را ایجاد میکند باید اصلاح شود، نه tcpdump.
بستههای Apple Ethertalk DDP باید به همان آسانی بستههای KIP DDP چاپ شوند، اما در واقع چنین نیست. حتی اگر میخواستیم کاری برای ترویج Ethertalk انجام دهیم (که قصدی نداریم)، LBL اجازهٔ حضور Ethertalk را روی هیچیک از شبکههای خود نمیدهد، بنابراین راهی برای آزمایش این کدها نداریم.
تغییرات ساعت تابستانی در مسیر عبور بستهها ممکن است باعث ناهماهنگی در برچسبهای زمانی شود (این تغییر زمانی نادیده گرفته میشود).
عبارات فیلتر مربوط به هدرهای FDDI فرض میکنند که تمامی بستههای FDDI درون بستههای اترنت کپسولهسازی شدهاند. این موضوع بدون شک برای IP، ARP و DECNET Phase IV درست است، اما برای برخی پروتکلها مانند ISO CLNS صادق نیست؛ بنابراین فیلتر ممکن است بهطور ناخواسته بستههایی را بپذیرد که در واقعیت با عبارت فیلتر مطابقت ندارند.
| 30 June 1997 |