що робить `tcpdump -xx` у Mac OS X?


2

Я грав tcpdump, і я помітив, що в OS X -xxопція робить щось, що відрізняється від описаного на сторінці man.

Ось що manговорить на сторінці:

   -x     When parsing and printing, in addition to printing the headers of each packet, print the data of each packet (minus its link level header) in hex.
          The  smaller  of  the entire packet or snaplen bytes will be printed.  Note that this is the entire link-layer packet, so for link layers that pad
          (e.g. Ethernet), the padding bytes will also be printed when the higher layer packet is shorter than the required padding.

   -xx    When parsing and printing, in addition to printing the headers of each packet, print the data of each packet, including its link level header,  in
          hex.

Тож якщо я правильно розумію, -xxпокаже мені заголовок Ethernet, але -xне буде. Це вірно в Linux. Однак, на OS X, -xпоказує мені заголовок Ethernet, в той час як -xxставимо перед собою кілька зайвих барахлів. Як бачите, заголовок Ethernet 0886 3b60 1d3c 28cf e919 a36d 0800відображається в обох -xі -xx, і в -xxньому відображається у рядку, позначеному символом, 0x0060і я не маю уявлення, що дані надходять до цього.

Ось один зразок виводу tcpdump -xxв OS X:

$ sudo tcpdump -Sxx -e -n port 33407
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Packet Tap), capture size 65535 bytes
11:10:11.177881 28:cf:e9:19:a3:6d > 08:86:3b:60:1d:3c, ethertype IPv4 (0x0800), length 78: 192.168.2.8.49923 > 23.239.3.247.33407: Flags [S], seq 1859065803, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 461417464 ecr 0,sackOK,eol], length 0
    0x0000:  6c00 0000 0100 0000 0100 0000 656e 3000
    0x0010:  0000 0000 0000 0000 0000 0000 0000 0000
    0x0020:  0000 0000 0200 0000 0200 0000 0e00 0000
    0x0030:  0000 0000 4f10 0100 7373 6800 0000 0000
    0x0040:  0000 0000 0000 0000 0000 0000 0000 0000
    0x0050:  0600 0000 ffff ffff 0000 0000 0000 0000
    0x0060:  0000 0000 0000 0000 0000 0000 0886 3b60
    0x0070:  1d3c 28cf e919 a36d 0800 4500 0040 66af
    0x0080:  4000 4006 f572 c0a8 0208 17ef 03f7 c303
    0x0090:  827f 6ecf 17cb 0000 0000 b002 ffff c4d1
    0x00a0:  0000 0204 05b4 0103 0304 0101 080a 1b80
    0x00b0:  abf8 0000 0000 0402 0000

І ось один зразок виходу tcpdump -x:

$ sudo tcpdump -Sxvv -e -n port 33407
tcpdump: data link type PKTAP
tcpdump: listening on pktap, link-type PKTAP (Packet Tap), capture size 65535 bytes
11:10:48.727138 28:cf:e9:19:a3:6d > 08:86:3b:60:1d:3c, ethertype IPv4 (0x0800), length 102: (tos 0x10, ttl 64, id 25163, offset 0, flags [DF], proto TCP (6), length 88)
    192.168.2.8.49923 > 23.239.3.247.33407: Flags [P.], cksum 0x1126 (correct), seq 1859067461:1859067497, ack 2295673726, win 8192, options [nop,nop,TS val 461454802 ecr 120336925], length 36
    0x0000:  0886 3b60 1d3c 28cf e919 a36d 0800 4510
    0x0010:  0058 624b 4000 4006 f9ae c0a8 0208 17ef
    0x0020:  03f7 c303 827f 6ecf 1e45 88d5 337e 8018
    0x0030:  2000 1126 0000 0101 080a 1b81 3dd2 072c
    0x0040:  321d cdac 025c 44d7 8043 f45e da96 1c0d
    0x0050:  fbf3 de02 c17e 03ef 1014 d6da 506f c0c3
    0x0060:  a405 8cbd fcdc

Відповіді:


2

На початку цих пакетів немає заголовка Ethernet. Тип заголовка посилального рівня - DLT_PKTAP, і ось так виглядають його заголовки .

Ви отримаєте подібний сюрприз, якщо будете захоплюватися в режимі монітора на OS X - або Linux! - оскільки пакети, ймовірно, починатимуться із заголовків радіодач .

Документація та сам tcpdump були написані у більш просту епоху, перш ніж у нас були шари зв’язків, де є причина мати багато метаданих (наприклад, 802.11 та метаданих для шарів нижче шару MAC) та механізмів надання інших видів метадані (такі, як надає PKTAP).

Tcpdump, можливо, повинен розрізняти заголовки метаданих та заголовки шару посилань, за замовчуванням не показувати шари метаданих -xxі лише демпінгувати їх -xxxчи щось подібне. Можливо, ви захочете подати помилку на цей трекер випуску tcpdump . (Мабуть, має бути якесь обговорення, оскільки це було б несумісною зміною виводу tcpdump.)

Що стосується не отримання DLT_PKTAP, спробуйте захопити певний інтерфейс, використовуючи -iпрапор; tcpdump в Yosemite за замовчуванням для захоплення на всіх мережевих інтерфейсах одночасно. В Linux це можна зробити, захопивши інтерфейс "будь-який", який також не дає заголовків Ethernet, він дає вам заголовки захоплення Linux, але це не за замовчуванням для "будь-якого" інтерфейсу; На Yosemite він за замовчуванням захоплює всі інтерфейси одночасно.


Дякую за роз’яснення. Я не маю уявлення про посилання шар: D. Я вирішив не подавати помилку на цей раз, побачу, чи варто цього робити, коли я дізнаюся більше про це ;-).
h__
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.