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

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

Модератор: Bizdelnick

Аватара пользователя
жучара
Сообщения: 1164
ОС: 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.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1164
ОС: Debian 12

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

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

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

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

Сообщение Bizdelnick »

Какие тут могут быть мысли, если Вы фильтры свои не показываете? И в целом кейс не вполне ясен. Вы с утра до ночи сидите и глядите на выхлоп tshark в реальном времени? Не верю.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1164
ОС: 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
Модератор
Сообщения: 21497
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

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

Bizdelnick писал:
20.05.2026 00:29
А, так это на самом деле два пакета, захваченные при прохождении двух интерфейсов, а не четыре разных? А зачем надо их дублировать? Когда выполняется, фактически, два захвата на двух интерфейсах, конечно, будет состояние гонки и непредсказуемый порядок вывода.
на одном интерфейсе тоже нет порядка. Исходные данные те же, на машине A генерировал сообщения вот так: nc 2.98.166.224 9999 -e sk.sh

Где sk.sh это файл, который и выдаёт сообщения, каждую сотую долю секунды одно сообщение, вот так:

Shell

$ cat sk.sh
#!/bin/bash

while true
do
sleep 0.01
date +%s%N
done
$
С фильтром извратился:
tshark -i enp0s3 -f "tcp and dst 2.45.23.56" -i enp0s8 -f "tcp and dst 45.24.12.78" -i enp0s8 -f "tcp and dst 2.98.166.224" -i enp0s3 -f "tcp and dst 2.98.166.224" > dst.txt

перехватываю также на двух интерфейсах, всё пихаю в один файл dst.txt, потом парсю его, разделяю пакеты перехваченные на разных интерфейсах. Думаю, пусть на обоих интерфейсах будет каша малаша, но по раздельности будет порядок. Увы, на enp0s3 порядка нет, на enp0s8 не проверял.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21497
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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