В наши дни во встроенных системах часто имеется поддержка сети. Это может значительно их усложнить. Сетевая нагрузка на системы обычно не отличается высоким уровнем детерминированности, существуют разные варианты таких нагрузок. Порой в сетях происходят довольно-таки странные события. Например, пусть у кого-то имеется монтажная машина (PNP), к которой может обратиться любой пользователь интернета. Про эту машину написали статью на Hackaday, после чего её владелец вдруг обнаружил, что объём данных, которыми она обменивается с интернетом, возрос в 50 раз. Как в такой ситуации ведёт себя сетевая подсистема этой машины? И хотя в задаче тестирования сетей нет универсального инструмента, способного устранить все проблемы, существуют приёмы работы, которые могут упростить решение этой задачи. Один из таких приёмов работы заключается в использовании утилит из набора
![](https://habrastorage.org/r/w780q1/webt/wj/6d/tr/wj6dtrex1olfb9z9wkupy773wm4.jpeg)
Вам, возможно, известно о том, что утилита
Хотя результаты захвата трафика, если нет инструмента, чтобы их расшифровать, могут выглядеть довольно-таки таинственными, утилита
Иногда использование
Обычно диапазон захватываемых данных как-то ограничивают. Например:
Ещё один распространённый способ фильтрации сетевых данных предусматривает использование ключевого слова
Тут можно использовать и диапазоны портов (например — 80-89), имеется и множество других фильтров, например — учитывающих размеры пакетов. Условия фильтрации можно объединять, пользуясь операторами
То, что именно захватит
Итак, после применения
Именно сейчас в игру вступает
Но у того, кто применяет эту утилиту, может возникнуть потребность в том, чтобы управлять разными аспектами её работы. Например, без дополнительных настроек она «воспроизводит» трафик на той же скорости, на которой он изначально передавался. А с помощью опции
Утилита поддерживает и другие опции, влияющие на её производительность. Так, опция
В некоторых особых случаях может возникнуть необходимость в том, чтобы, в целях тестирования, по-настоящему нагрузить сетевой интерфейс. Существуют особые драйверы, которые может использовать
Иногда нужно внести какие-то небольшие изменения в сетевые данные, хранящиеся в файле, не меняя при этом сам файл. Базовая утилита поддерживает некоторые способы такого воздействия на данные. Например, опция
Но иногда нужно вносить в данные более серьёзные изменения. В таком случае стоит взглянуть на утилиту
Вот практический пример. Можно записать сессию обмена данными между клиентом и сервером. Для того чтобы воспроизвести поведение сервера, понадобится убрать из файла с захваченными сетевыми данными ответы сервера и переписать MAC-адреса, в результате роль клиента будет выполнять компьютер, на котором работает
Утилиты, о которых мы говорили, представляют собой мощные инструменты. Их, как и любые другие подобные инструменты, можно использовать во благо или во зло. У них имеется очень много параметров. Но тот, кто с ними, так сказать, «поиграется», тот, кто хотя бы бегло почитает справку по ним, обнаружит, что способен найти подходы к мониторингу и «воспроизведению» сетевого трафика своих систем. Это поможет ему в решении очередной вставшей перед ним заковыристой сетевой проблемы.
Пользуетесь ли вы утилитами для захвата и «воспроизведения» сетевого трафика?
![](https://habrastorage.org/r/w1560/webt/ou/g5/kh/oug5kh6sjydt9llengsiebnp40w.png)
tcpreplay
, которые позволяют записывать совокупный сетевой трафик, а потом «воспроизводить» его различными способами. У применения этого приёма есть множество сильных сторон. Особенно — если удалось «изловить» именно то, что эпизодически приводит к возникновению ошибок. Возможность по желанию «воспроизводить» такой трафик способна значительно ускорить процесс диагностики сетевых проблем.![](https://habrastorage.org/webt/wj/6d/tr/wj6dtrex1olfb9z9wkupy773wm4.jpeg)
Все переводы серии
Кунг-фу стиля Linux: удобная работа с файлами по SSH
Кунг-фу стиля 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 для пингвинов
Кунг-фу стиля 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: удобная работа с файлами по SSH
Кунг-фу стиля 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 для пингвинов
Кунг-фу стиля 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://habrastorage.org/webt/ou/g5/kh/oug5kh6sjydt9llengsiebnp40w.png)