LINUX.ORG.RU
ФорумAdmin

tshark capture filter for HTTP


0

2

Есть необходимость посчитать кол-во пакетов между юзерской сетью и некоторым внешним сайтом. Казалось бы, чего проще. Вот только сенсор может быть воткнут только между юзерами и проксёй (к проксе доступа нет). Если писать весь трафик между юзерами и проксёй, а потом его фильтровать в wireshark display-фильтром то в принципе по http host получается, но .cap файл растёт уж очень быстро, так что потом его не распарсить wireshark'ом. Поэтому хотелось бы соорудить capture фильтр, чтоб в него можно было вписать http host. В мануале wireshark встретил пример capture-filter для get запросов, но нифига не понял синтаксис. Кто сталкивался можете внятный мануал дать?

★★★★★
Ответ на: комментарий от zolden

В идеальном случае - весь HTTP трафик к определенному сайту (чтоб кроме этого сайта в .cap файл ни чего не попадало).

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

Непонятно до конца, что именно тебе нужно.
tshark имеет синтаксис очень схожий с tcpdump, но плюс он может поверх фильтров захвата, накладывать фильтры отображения.
В общем случае тебе достаточно фильтровать по IP и порту (host 1.2.3.4 and port 80) без фильтров отображения.
http.host есть только в GET запросе, если фильтровать по нему, то ответов ты не увидишь
Я не буду посылать тебя в гугл, где тысячи примеров использования, которые ты наверняка прочитал.
Показывай что именно пробовал и что именно непонятно.

zolden ★★★★★
()
Ответ на: комментарий от zolden

В общем случае тебе достаточно фильтровать по IP и порту (host 1.2.3.4 and port 80) без фильтров отображения.

Нет.
Как я уже написал в первом посте, я могу воткнуть сниффер только между юзерской сетью и проксёй. Так что ни какого somesite:80 я в трафике не увижу, вместо них будет только proxy:3128. Писать ВЕСЬ трафик идущий через проксю нереально, поэтому хочу писать только те пакеты, которые содержат строку «somesite» (пофиг, в каком месте HTTP заголовка).

af5 ★★★★★
() автор топика
Ответ на: комментарий от zolden

там как я понял надо искать смещение строки, бить её на символы и коды символов передавать (типа HEX парсера), но с синтаксисом нифига не понял

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

У меня работает.

% sudo tshark -i any -R http.host=="ya.ru"                                                                                                                                   Capturing on Pseudo-device that captures on all interfaces
  3.207242 192.168.1.2 -> 77.88.21.3   HTTP 486 GET / HTTP/1.1

Считать смещения и длину в этом случае не надо, wireshark/tshark сам распаковывает пакеты до 7го уровня и смотрит что внутри

zolden ★★★★★
()
Ответ на: комментарий от zolden

Да,
Но не работает запись в файл =)

tshark: Read filters aren't supported when capturing and saving the captured packets.

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

простое перенаправление в файл не поможет?
я возился со смещениями одно время, но если поля в пакете могут быть переменной длины, то эта задача превращается в ад. Там по идее всё просто - нужно просто указать начиная с какого байта сколько байт считать. Для этого надо знать и понимать формат IP и TCP пакетов. http://www.wains.be/pub/networking/tcpdump_advanced_filters.txt

zolden ★★★★★
()
Последнее исправление: zolden (всего исправлений: 2)
Ответ на: комментарий от af5

прокси у меня конечно нет, скрывать не буду

zolden ★★★★★
()
Ответ на: комментарий от af5

Давай по-порядку:
- что не так с http.host? прокси там своё имя проставляет или что?
- что не так с перенаправлением в файл?
- если перенаправление в файл не вариант, то надо разбирать пакет, смотря на каком по счёту байте от начала пакета идёт http.host, сравнивать его значение и писать, тогда это будет capture filter, а не display filter

zolden ★★★★★
()
Ответ на: комментарий от zolden

http.host и перенаправление в файл (как и его эмуляция в capture filter) это полу-решение, поскольку это лишь часть пакетов соответствующего tcp потока. А хотелось бы все пакеты посчитать. Но, видимо, придётся обходиться этим.

af5 ★★★★★
() автор топика

Из-за многочисленных исправленных и потенциальных уязвимостей в wireshark/tshark, авторы не рекомендуют постоянный сбор информации из этих программ.

Обычно сбор трафика осуществляется через tcpdump с нужными фильтрами, и уже потом получившийся файл/файлы можно анализировать в tshark/wireshark.

там же уже можно добавлять протоколо специфичные вещи, вроде фильтрации всех tcp сессий/всех http сессий в определёнными cookies.

Так же если файл pcap растёт слишком быстро, можно использовать сжатие через fifo или stdin/stdout в lzo или gzip.

т.е. tcpdump -w outfile.cap -s 65535 host 192.168.55.1 and tcp port

ihanick
()
Ответ на: комментарий от zolden

он может внутри пакетов заглядывать вплоть до L7

Только если специально ядро пропатчить, что на продуктивном роутере вряд-ли кто-то будет делать. Да и в этом случае вряд ли...

af5 ★★★★★
() автор топика
Ответ на: комментарий от ihanick

можно использовать сжатие через fifo или stdin/stdout в lzo или gzip

да хоть через libastral, wireshark'у его всё равно необходимо подавать распакованным будет

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

все снифферы умеют резать дампы или делать их ротацию, так что некий принципиальный затык в плане размера дампа явно надуман

zolden ★★★★★
()
Ответ на: комментарий от zolden

ротируй не ротируй, а копировать потом себе на комп сотни гигабайт дампов всё равно придётся, а потом ещё и парсить их, не... нафик нафик

af5 ★★★★★
() автор топика
Ответ на: комментарий от af5

поэтому хочу писать только те пакеты, которые содержат строку «somesite» (пофиг, в каком месте HTTP заголовка).

Можно попробовать сделать приблизительный счётчик. Первый пакет соединения анализировать на предмет стоки «somesite», выставлять метку соединения (-j CONNMARK) и считать пакеты этих соединений.

Правда, я не знаю, может ли браузер общатся с разными сайтами в одном коннекте с proxy.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.