tcpreplay
, которые позволяют записывать совокупный сетевой трафик, а потом «воспроизводить» его различными способами. У применения этого приёма есть множество сильных сторон. Особенно — если удалось «изловить» именно то, что эпизодически приводит к возникновению ошибок. Возможность по желанию «воспроизводить» такой трафик способна значительно ускорить процесс диагностики сетевых проблем.
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
Основная идея
Вам, возможно, известно о том, что утилита tcpdump
, работающая в командной строке, позволяет перехватывать пакеты, проходящие через сетевой интерфейс, и сохранять их в файл. Если вам ближе программы с графическим интерфейсом — то вы, возможно, используете для решения той же задачи Wireshark. В двух этих инструментах используется одна и та же базовая библиотека для захвата данных — libcap
. На самом деле, трафик можно захватывать, пользуясь tcpdump
, а просматривать захваченные данные можно с помощью Wireshark. Правда, работать с такими данными можно и с помощью других инструментов — вроде tcptrace
и Ngrep
.
Хотя результаты захвата трафика, если нет инструмента, чтобы их расшифровать, могут выглядеть довольно-таки таинственными, утилита tcpreplay
может брать подобные данные, сохранённые в файле, и «воспроизводить» их различными способами. Конечно, данные, хранящиеся в подобных файлах можно, перед «воспроизведением», отредактировать. Есть инструменты, которые облегчают решение этой задачи. А если надо — можно, опять же, с помощью соответствующих инструментов, конструировать трафик для «воспроизведения» самостоятельно. Этот процесс часто называют «packet crafting» — «создание пакетов».
Захват данных
Иногда использование tcpdump
— это пример того, что «слишком хорошо — тоже нехорошо». Если захватывать всё подряд с некоего сетевого устройства, в результате получатся просто огромные файлы с данными:
tcpdump -i eth0
Обычно диапазон захватываемых данных как-то ограничивают. Например:
tcpdump src 192.168.1.111 # данные, идущие от адреса .111 tcpdump dst 192.168.1.111 # данные, идущие на адрес .111 tcpdump host 192.168.1.111 # данные, идущие от адреса .111 или на этот адрес
Ещё один распространённый способ фильтрации сетевых данных предусматривает использование ключевого слова net
для выбора данных, имеющих отношение к конкретной подсети, или слова port
. Данные даже фильтруют по используемому протоколу, вроде arp
или ip6
. Эти механизмы фильтрации данных можно и комбинировать:
tcpdump port 8088 # трафик, имеющий отношение к порту 8088 tcpdump dst port 8080 # трафик, идущий на порт 8088
Тут можно использовать и диапазоны портов (например — 80-89), имеется и множество других фильтров, например — учитывающих размеры пакетов. Условия фильтрации можно объединять, пользуясь операторами or
и and
. На самом деле, tcpdump
— это большая тема, для изучения которой можно прибегнуть к справке по этой утилите.
То, что именно захватит tcpdump
, зависит от используемого протокола. Для отображения данных в шестнадцатеричном формате можно пользоваться опциями -X
или -XX
.
Итак, после применения tcpdump
в нашем распоряжении будет файл, содержащий некие интересные сетевые данные. Как «воспроизвести» эти данные в отладочных целях?
Операция «Воспроизведение»
Именно сейчас в игру вступает tcpreplay
. Если не вдаваться в детали, то пользоваться этой утилитой очень просто:
tcpreplay -i eth0 traffic.pcap
Но у того, кто применяет эту утилиту, может возникнуть потребность в том, чтобы управлять разными аспектами её работы. Например, без дополнительных настроек она «воспроизводит» трафик на той же скорости, на которой он изначально передавался. А с помощью опции --mbps
можно задать желаемую скорость потока данных. Можно даже воспользоваться настройкой вида --mbps=0
для того чтобы между пакетами вообще не было бы задержек.
Утилита поддерживает и другие опции, влияющие на её производительность. Так, опция -K
позволяет, если это возможно, считать весь файл с захваченными данными в память, что улучшает производительность. Сильно улучшить производительность способна опция --loop
, позволяющая повторить воспроизведение захваченных данных несколько раз.
В некоторых особых случаях может возникнуть необходимость в том, чтобы, в целях тестирования, по-настоящему нагрузить сетевой интерфейс. Существуют особые драйверы, которые может использовать tcpreplay
, позволяющие взаимодействовать с аппаратными сетевыми устройствами напрямую. Это, правда, приведёт к остановке обычных сетевых операций во время тестирования.
Редактирование захваченных данных
Иногда нужно внести какие-то небольшие изменения в сетевые данные, хранящиеся в файле, не меняя при этом сам файл. Базовая утилита поддерживает некоторые способы такого воздействия на данные. Например, опция --unique-ip
позволяет менять IP-адреса пакетов в каждой итерации цикла так, чтобы все пакеты выглядели бы уникальными.
Но иногда нужно вносить в данные более серьёзные изменения. В таком случае стоит взглянуть на утилиту tcpreplay-edit
. Например, с её помощью можно осуществить переназначение TCP- или UDP-портов. Ещё она умеет рандомизировать IP-адреса, убирать широковещательные сообщения и позволяет, что называется, «на лету», вносить в трафик другие изменения.
Вот практический пример. Можно записать сессию обмена данными между клиентом и сервером. Для того чтобы воспроизвести поведение сервера, понадобится убрать из файла с захваченными сетевыми данными ответы сервера и переписать MAC-адреса, в результате роль клиента будет выполнять компьютер, на котором работает tcpreplay
.
Итоги
Утилиты, о которых мы говорили, представляют собой мощные инструменты. Их, как и любые другие подобные инструменты, можно использовать во благо или во зло. У них имеется очень много параметров. Но тот, кто с ними, так сказать, «поиграется», тот, кто хотя бы бегло почитает справку по ним, обнаружит, что способен найти подходы к мониторингу и «воспроизведению» сетевого трафика своих систем. Это поможет ему в решении очередной вставшей перед ним заковыристой сетевой проблемы.
Пользуетесь ли вы утилитами для захвата и «воспроизведения» сетевого трафика?
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
ссылка на оригинал статьи https://habr.com/ru/articles/568308/
Добавить комментарий