Как сделать так, чтобы tshark показывал пакеты в порядке их прихождения?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1163
ОС: Debian 12

Как сделать так, чтобы tshark показывал пакеты в порядке их прихождения?

Сообщение жучара »

Друзья! Вот перехваченные пакеты. Слева- время перехвата, я так понимаю, он считает от начала перехвата:

Shell

1 0.000000000 2.98.166.224 → 45.24.12.78 TCP 66 9999 → 34648 [ACK] Seq=1 Ack=1 Win=510 Len=0 TSval=3526312897 TSecr=4233646598
2 -0.002758316 45.24.12.78 → 2.98.166.224 TCP 72 [TCP Spurious Retransmission] 34648 → 9999 [PSH, ACK] Seq=4294967291 Ack=1 Win=502 Len=6 TSval=4233646598 TSecr=3526064738
3 0.000034861 2.98.166.224 → 2.45.23.56 TCP 66 9999 → 34648 [ACK] Seq=1 Ack=1 Win=510 Len=0 TSval=3526312897 TSecr=4233646598
4 -0.002810762 2.45.23.56 → 2.98.166.224 TCP 72 [TCP Spurious Retransmission] 34648 → 9999 [PSH, ACK] Seq=4294967291 Ack=1 Win=502 Len=6 TSval=4233646598 TSecr=3526064738
Вот время:

Shell

1 0.000000000
2 -0.002758316
3 0.000034861
4 -0.002810762
А на самом деле в таком порядке всё должно быть (и фо факту пакеты приходили в порядке, как показано ниже. Если бы они так делали, отчёт бы пошёл от нуля, отрицательных значений не было бы было бы удобнее, но не об этом речь сейчас, а о порядке показа)

Shell

4 -0.002810762 2.45.23.56 → 2.98.166.224 TCP 72 [TCP Spurious Retransmission] 34648 → 9999 [PSH, ACK] Seq=4294967291 Ack=1 Win=502 Len=6 TSval=4233646598 TSecr=3526064738
2 -0.002758316 45.24.12.78 → 2.98.166.224 TCP 72 [TCP Spurious Retransmission] 34648 → 9999 [PSH, ACK] Seq=4294967291 Ack=1 Win=502 Len=6 TSval=4233646598 TSecr=3526064738
1 0.000000000 2.98.166.224 → 45.24.12.78 TCP 66 9999 → 34648 [ACK] Seq=1 Ack=1 Win=510 Len=0 TSval=3526312897 TSecr=4233646598
3 0.000034861 2.98.166.224 → 2.45.23.56 TCP 66 9999 → 34648 [ACK] Seq=1 Ack=1 Win=510 Len=0 TSval=3526312897 TSecr=4233646598
Почему так происходит, я понимаю. Пакеты выводятся не в порядке перехвата, а в порядке прохождения фильтрации. tshark перехватывает ВСЕ пакеты, а вот дальше начинается процедура фильтрации. У меня фильтр большой, эксперимента ради условия фильтрации совсем даже не соответствуют порядку прихождения пакетов. На практике это означает вот что: первый пакет пришёл, время прихождения ЗАФИКСИРОВАЛОСЬ, и дальше пошла процедура фильтрации. И она идёт долго. За это время приходят и остальные пакеты и тоже все фильтруются и выводятся не в порядке прохождения, а в порядке фильтрования. Какой фильтранётся следующим, тот следующим и выведется. В моём случае видно, что пакет, пришедший первым вывелся последним (смотрим по метке времени)

Да как так-то? Мне важно увидеть именно порядок прихождения пакетов- одна из целей этого всего, а порядок прохождения фильтрации мне до одного места. А так, получается, чтобы пакеты увидеть в порядке прихождения, я этот порядок должен заранее знать и построить фильтр согласно ему- проверено- если правильно фильтр составить, то и порядок будет правильный. Подспорье: чтобы увидеть пакеты в правильном порядке, я должен составит фильтр в правильном порядке, а для этого я должен правильный порядок знать заранее (а вообще не факт, может, повезло мне просто). Как в том мультике: чтобы продать что-нибудь ненужное, нужно купить что-нибудь ненужное, а у нас денег нет. Ерунда полная.

И главное- у них же где-то там внутри есть временной порядок- вот же время. Ну пусть оно отрицательное где-то, это уже второй вопрос. Выводите отфильтрованные пакеты согласно времени и всё. Наверное, отфильтрованным пакетам придётся ждать, когда отфильруются все пакеты, пришедшие до него- ах, какое горе. Программа усложнится, возможно, для каждого отфильтрованного пакет придётся писать цикл, в котором он будет проверять, не вывелся ли предыдущий пришедний пакет. Ну да, так, как сейчас, конечно, проще, выводи все скопом, авось разберутся- это в реальном-то времени разберутся?

А потому сабж. Спасибо, кто откликнется. Debian 12.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1163
ОС: Debian 12

Re: Как сделать так, чтобы tshark показывал пакеты в порядке их прихождения?

Сообщение жучара »

Ну что, ребята, есть какие-нибудь мысли? У меня только одна мысль. Если интересует, например, 4 пакета, то перехватываем 4 пакета и их сортируем, как-то так: tshark <фильтр> -c 4 | sort -k 2. Недостаток явен- нельзя просматривать поток пакетов, а только определённое количество. Плюс ко всему, нужно сидеть и ждать, пока именно 4 пакета не фильтранутся. А если в фильтре ошибся? Будешь ждать до бесконечности. Вопрос открыт поэтому.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21496
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы tshark показывал пакеты в порядке их прихождения?

Сообщение Bizdelnick »

Какие тут могут быть мысли, если Вы фильтры свои не показываете? И в целом кейс не вполне ясен. Вы с утра до ночи сидите и глядите на выхлоп tshark в реальном времени? Не верю.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1163
ОС: Debian 12

Re: Как сделать так, чтобы tshark показывал пакеты в порядке их прихождения?

Сообщение жучара »

Bizdelnick писал:
19.05.2026 17:53
Какие тут могут быть мысли, если Вы фильтры свои не показываете? И в целом кейс не вполне ясен. Вы с утра до ночи сидите и глядите на выхлоп tshark в реальном времени? Не верю.
считаю правильным смотреть не всё время, а когда захотел. И скромное такое пожелание- видеть в эти редкие моменты смотрения не кашу малашу, а пакеты в порядке прибытия.

Есть цепь из шести машин, на рисунке.
ts.png

Цель: соединить две крайних машины tcp, попосылать друг другу пакеты. На машине B развёрнут NAT, там же перехватываю пакеты tshark. На машине F запущено nc -l -p 9999, на машине A запущено nc 2.98.166.224 9999 На машине A в консоли пишу всякие строчки и они благополучно отображаются на машине F

А потом решил пакеты эти отследить и на машине B написал такой фильтр:
tshark -i enp0s3 -f "tcp and (dst 2.45.23.56 or dst 2.98.166.224) " -i enp0s8 -f "tcp and (dst 45.24.12.78 or dst 2.98.166.224)"
То есть по порядку: сперва написал соединение enp0s3, потом enp0s8. Может, и не идеальный фильтр, но и не изврат. Запускаю перехватчик tshark на машине B, на машине A пишу что-нибудь в консоли и вот что имею на машине B:

Shell

$ tshark -i enp0s3 -f "tcp and (dst 2.45.23.56 or dst 2.98.166.224) " -i enp0s8 -f "tcp and (dst 45.24.12.78 or dst 2.98.166.224)"
Capturing on 'enp0s3' and 'enp0s8'
** (tshark:3536) 22:33:49.837185 [Main MESSAGE] -- Capture started.
** (tshark:3536) 22:33:49.837280 [Main MESSAGE] -- File: "/tmp/wireshark_2_interfacesTUQ3O3.pcapng"
1 0.000000000 2.45.23.56 → 2.98.166.224 TCP 71 55064 → 9999 [PSH, ACK] Seq=1 Ack=1 Win=502 Len=5 TSval=4206650416 TSecr=351930876
2 0.002616238 2.98.166.224 → 2.45.23.56 TCP 66 9999 → 55064 [ACK] Seq=1 Ack=6 Win=510 Len=0 TSval=352023730 TSecr=4206650416
3 0.000052536 45.24.12.78 → 2.98.166.224 TCP 71 55064 → 9999 [PSH, ACK] Seq=1 Ack=1 Win=502 Len=5 TSval=4206650416 TSecr=351930876
4 0.002580132 2.98.166.224 → 45.24.12.78 TCP 66 9999 → 55064 [ACK] Seq=1 Ack=6 Win=510 Len=0 TSval=352023730 TSecr=4206650416
Никакого порядка.
По-моему, я писал уже это. Конечно, можно поменять фильтр так, что пакеты отобразятся в порядке прихождения. Считаю, что должны быть возможность, отображать пакеты в порядке прихождения НЕЗАВИСИМО от фильтра. Тем более, что порядок прихождения фиксируется- (смотрим на время).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21496
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как сделать так, чтобы tshark показывал пакеты в порядке их прихождения?

Сообщение Bizdelnick »

А, так это на самом деле два пакета, захваченные при прохождении двух интерфейсов, а не четыре разных? А зачем надо их дублировать? Когда выполняется, фактически, два захвата на двух интерфейсах, конечно, будет состояние гонки и непредсказуемый порядок вывода.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: