Как можно посмотреть содержимое icmp пакетов
Sysadminium
База знаний системного администратора
Утилита tcpdump для анализа сети
Консольная утилита tcpdump предназначена для исследования сетевого трафика на linux серверах. Как работать с tcpdump на Linux? Рассмотрим в этой статье.
Установка и начало использования
Установить эту утилиту в debian или ubuntu можно так:
Использовать данное приложение может только администратор. Поэтому для работы используем sudo или работаем под пользователем root.
Первым делом можем посмотреть список доступных интерфейсов используя опцию -D:
Рассмотрим эти интерфейсы:
Захват пакетов и вывод информации
Теперь рассмотрим полученную информацию, которая состоит из заголовков каждого пакета выводимые построчно. Строка состоит из следующих полей:
Эта утилита может показывать не только заголовки, но и содержимое пакетов, но об этом позже.
Фильтры
Чтобы не захватывать все пакеты, нужно использовать фильтры. Например можно захватить пакеты только от определённого ip адреса, номера порта или протокола. Вот список самых распространённых фильтров:
Например захватим 10 пакетов связанных с www.incentivespro.com.
Совмещение различных фильтров
Фильтры можно совмещать, например захватим только icmp пакеты связанные с ip адресом 172.30.81.7:
Совмещать фильтры можно следующими операторами:
В примере выше мы использовали – and.
Опции отвечающие за формат и количество выводимой информации
Теперь разберёмся с наиболее используемыми опциями, которые отвечают за формат вывода:
Примеры команд
Смотрим все пакеты на всех интерфейсах или на каком-то одном:
Ловим пакеты у которых адрес:
Ловим пакеты у которых порт:
Ловим пакеты определенного протокола:
Ловим tcp пакеты у которых порт входит в группу портов:
Тоже самое, но смотрим содержимое пакетов:
Пишем результат в файл и считываем из файла:
Опции, фильтры и комбинации фильтров утилиты tcpdump позволяют исследовать работу сети. Это может пригодиться при поиске проблемы, при анализе безопасности сети, а также если вы изучаете какой-нибудь протокол и хотите на практике понаблюдать за его работой.
tcpdump инструкция и примеры
tcpdump инструкция на русском и примеры.
-A задает вывод каждого пакета (без заголовков канального уровня) в формате ASCII. Этот режим удобен для сбора трафика HTTP.
-c задает завершение работы программы после захвата заданного числа пакетов.
-d задает вывод дампа скомпилированного кода соответствия пакетов (packet-matching code) в понятном человеку формате и завершение работы программы.
-dd выводит дамп кода соответствия в виде фрагмента C-программы.
-ddd выводит дамп кода соответствия в виде строки десятичных значений, перед которой следует строка со значением счетчика.
Эта опция может быть весьма полезна для систем, не дающих информации об имеющихся сетевых интерфейсах3.
-e выводит заголовок канального уровня в каждой строке дампа.
-E задает использование алгоритма и секрета spi@ipaddr для расшифровки пакетов IPsec ESP, направленных по адресу ipaddr и содержащих and в поле Security Parameter Index значение
spi. Комбинация spi и адреса может быть повторена с использованием в качестве разделителя запятой или новой строки. Отметим, что установка секрета для пакетов IPv4 ESP в
настоящее время поддерживается.
В качестве алгоритмов могут использоваться des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc или none. По умолчанию применяется алгоритм des-cbc. Возможность дешифровки
пакетов обеспечивается только в тех случаях, когда при компиляции tcpdump были включены опции поддержки криптографии.
Параметр secret содержит ASCII-текст секретного ключа ESP. Если секрет начинается с символов 0x, будет считываться шестнадцатеричное значение. Опция предполагает использование
ESP в соответствии с RFC 2406, а не RFC 1827. Эта опция поддерживается только для отладки и использовать ее с реальными секретными ключами не следует, поскольку введенный в
командной строке ключ IPsec доступен другим пользователям системы4.
Кроме явного указания параметров в командной строке их можно задать в файле опций, который tcpdump будет читать при получении первого пакета ESP.
-f задает вывод чужих адресов IPv4 в числовом формате. Использование этой опции позволяет избавиться от проблем, возникающих на серверах Sun NIS при попытках трансляции
нелокальных адресов. Проверка чужеродности адреса IPv4 осуществляется с использованием адреса и маски принявшего пакет интерфейса. Если адрес и маска интерфейса недоступны
(например, при использовании unnumbered-интерфейсов или при захвате пакетов со всех адресов в Linux с использованием фиктивного интерфейса any), эта опция будет работать
некорректно.
-F задает использование фильтров, содержащихся в указанном файле. В этом случае заданные в командной строке фильтры игнорируются.
-i задает сбор пакетов с указанного интерфейса. Если интерфейс не задан, tcpdump ищет в системе список доступных интерфейсов и выбирает в нем активное устройство с минимальным
номером (исключая loopback).
В системах Linux, начиная с ядра 2.2 поддерживается фиктивный интерфейс с именем any, обеспечивающий сбор пакетов со всех активных интерфейсов системы. Отметим, что сбор
пакетов с устройства any осуществляется в обычном (не promiscuous) режиме.
-l задает буферизацию строк stdout. Эта опция полезна в тех случаях, когда вы хотите просматривать данные во время сбора пакетов. Например, команды
обеспечивают запись пакетов в файл dat и одновременный вывод на консоль.
-L задает вывод списка известных типов канального уровня и завершение работы программы.
-m загружает модуль определений SMI MIB из указанного файла. Эта опция может использоваться неоднократно для загрузки нескольких модулей MIB.
-n отключает преобразование адресов и номеров портов в символьные имена.
-N задает использование только имен хостов, а не полных доменных имен. Например, вместо lhotze.bilim-systems.net при использовании этой опции моя рабочая станция будет
обозначаться как lhotze.
-O отключает оптимизатор кода проверки соответствия пакетов условиям фильтрации. Используйте эту опцию, если вам покажется, что оптимизатор работает с ошибками.
-q задает вывод минимального объема информации.
-R при установке этого флага предполагается, что пакеты ESP/AH используют старый вариант спецификации6 и tcpdump не будет выводить поля replay prevention (защита от
воспроизведения). Поскольку спецификация ESP/AH не включает поля с номером версии, tcpdump не может определить версию протокола ESP/AH по заголовкам пакетов.
-S задает вывод абсолютных порядковых номеров TCP взамен относительных.
-s задает захват из каждого пакета snaplen байтов вместо отбираемых по умолчанию 68 байтов7. Значение 68 подходит для протоколов IP, ICMP, TCP и UDP но может приводить к потере
протокольной информации для некоторых пакетов DNS и NFS. Потеря части пакетов по причине малого размера кадра захвата (snapshot) указывается в выходных данных полями вида
[|proto]’, где proto – имя протокольного уровня, на котором произошло отсечение части пакета8. Отметим, что увеличение кадра захвата приведет к дополнительным временным
затратам на обработку пакетов и уменьшению числа буферизуемых пакетов, что может привести к потере части пакетов. Используйте минимальное значение snaplen, которое позволит
обойтись без потери информации об интересующем вас протоколе. Установка snaplen = 0 приведет к захвату полных пакетов.
-T задает интерпретацию пакетов, выбранных с помощью фильтра, как пакетов указанного параметром типа. В настоящее время поддерживаются типы aodv9, cnfp10, rpc11, rtp12, rtcp13,
snmp14, tftp15, vat16 и wb17.
-t отключает вывод временных меток в каждой строке дампа.
-tt задает вывод в каждой строке дампа неформатированных временных меток.
-ttt задает вывод временных интервалов (в микросекундах) между захватом предыдущего и данного пакетов в каждой строке дампа.
-tttt задает вывод временных меток в принятом по умолчанию формате для каждой строки дампа.
-u задает вывод манипуляторов (handle) NFS без декодирования.
-v задает вывод дополнительной информации при захвате файлов. К такой информации может относиться значение TTL (время жизни), идентификация, общий размер, опции IP и т. п. При
использовании этого флага также выполняется дополнительная проверка целостности пакетов с помощью контрольных сумм (например, для протоколов IP и ICMP).
-vv задает дополнительное увеличение объема выводимой информации (например, полное декодирование пакетов SMB, вывод дополнительных полей откликов NFS и т. п.).
-x задает вывод шестнадцатеричного дампа (без заголовка канального уровня) для каждого захваченного пакета. Объем выводимой информации определяется меньшим из двух значений —
размер пакета и значение параметра snaplen. Отметим, что при захвате полных кадров канального уровня дамп может включать также байты заполнения, если пакет сетевого уровня
имеет малый размер.
-xx задает вывод шестнадцатеричного дампа для каждого пакета с включением заголовков канального уровня.
-X задает вывод дампа в шестнадцатеричном и ASCII-формате без заголовков канального уровня. Эта опция может быть очень удобна при анализе новых протоколов.
-XX задает вывод дампа в шестнадцатеричном и ASCII-формате с включением заголовков канального уровня.
Примеры.
tcpdump ’src 10.7.0.0 and (dst port 22 or 4589)’
tcpdump host 192.168.1.1
tcpdump src port 80
tcpdump ip host 192.168.1.2
tcpdump arp host 192.168.1.2
tcpdump rarp host 192.168.1.2
tcpdump not host pav253
tcpdump host pav253 or host pav210
One Response to “tcpdump инструкция и примеры”
Конечно, в рамках одной статьи надо-бы использовать одно название интерфейса, а не зоопарк. Ну и с кавычками да… Беда…
Используем tcpdump для анализа и перехвата сетевого трафика
Утилита tcpdump — отличный инструмент командной, который способен перехватывать и анализировать сетевой трафик. Может оказаться большим подспорьем при решении сетевых проблем. Пакеты можно сохранить в файл и анализировать позже. Рекомендуется время от времени запускать эту утилиту, чтобы следить за своей сетью.
Вывод tcpdump
Утилита tcpdump позволяет проверять заголовки пакетов TCP/IP и выводить одну строку для каждого из пакетов. Она будет делать это до тех пор, пока не нажать Ctrl + C.
Давайте рассмотрим одну строку из примера вывода:
Каждая строка включает:
Установка tcpdump
В дистрибутивах на основе Debian tcpdump можно установить с помощью команды APT:
В дистрибутивах на основе RPM tcpdump можно установить с помощью YUM:
В RHEL 8 с использование DNF:
Опции tcpdump
Запускать tcpdump нужно с правами root. Tcpdump включает в себя множество опций и фильтров. При запуске tcpdump без каких-либо параметров произойдет перехват всех пакетов, проходящих через интерфейс по умолчанию.
Вывести список доступных системе сетевых интерфейсов, в которых tcpdump может захватывать пакеты:
Очень полезно для систем, в которых нет команды для вывода списка интерфейсов.
По умолчанию tcpdump преобразует IP-адреса в имена хостов, а также использует имена служб вместо номеров портов.
Фильтры tcpdump
Фильтр выражений
Фильтр выражений выбирает, какие заголовки пакетов будут отображаться. Если фильтры не применяются, отображаются все заголовки пакетов.
Самые распространенные фильтры :
Фильтр портов
Фильт портов используется для просмотра пакетов, поступающих на определенный порт:
Фильтр хостов
Для перехвата пакетов, приходящих или исходящих от определенного хоста. Например, IP-адрес 10.0.2.15:
Для перехвата пакетов определенных типов протоколов. Например, icmp, на интерфейсе eth1:
Комбинирование фильтров
Фильтры можно комбинировать с помощью операторов:
Это позволит писать команды, которые могут более точно изолировать пакеты. Например, пакеты с определенного IP-адреса и для определенного порта:
Если нужно перехватить все пакеты кроме ICMP, используем оператор NOT:
Сохранение заголовков в файл
Вывод tcpdump может довольно быстро перемещаться по экрану. В таких случаях можно сохранить заголовки пакетов в файле с опцией -w. Вывод сохраняется в файлы с расширением .pcap.
Следующая команда сохраняет 10 строк вывода интерфейса eth1 в icmp.pcap.
Прочитать этот файл можно с помощью опции -r
Просмотр сведений о пакете
Пока мы видели только заголовки пакетов, а для просмотра содержимого нужно использовать параметр -A. Вывод содержимого будет в формате ASCII.
С помощью опции -X можно отобразить вывод в шестнадцатеричном формате, правда, это не сильно помогает в тех случаях, когда соединение зашифровано.
Вывод
Утилита tcpdump проста в настройке и освоении. Необходимо лишь немного разобраться с:
После чего tcpdump станет отличным помощником в вопросах обеспечения безопасности вашей сети.
Анализатор ICMP-пакетов своими руками
Бедному Диалапщику посвящается!
Итак, начнем. Я написал все на С++ (Borland C++ v5.01). Сначала действуем по стандартному плану создания сервера: инициализируем структуру sockaddr_in таким образом:
Затем инициализируем структуру protoent, чтобы winsock знал с каким протоколом мы будем работать:
protoent *protocol;
protocol = getprotobyname(«icmp»);
Создаем дескриптор сокета:
int sock;
sock = socket(AF_INET,SOCK_RAW,protocol->p_proto);
Обрати внимание, что мы работаем не с SOCK_DGRAM, и уж тем более не с SOCK_STREAM, а с SOCK_RAW, так называемые «сырые» сокеты. Затем, как обычно, проверяем на ошибки и идем далее
(если INVALID_SOCKET, то обломись дружок). Биндим наш сокет с
адресом, которой мы определили в указателе addr:
int err;
err = bind(sock,(sockaddr *)addr,sizeof(*addr));
Тоже проверяем на ошибки. Дальше начинается самое интересное: мы не вызываем функции listen() и
accept(), как обычно, а сразу начинаем принимать пакеты функцией recvfrom():
int rc;
char buffer[1024];
while(true)
<
rc = recvfrom(sock,buffer,sizeof(buffer),0,(sockaddr *)addr,&len);
>
Теперь у нас в руках полученный пакет (в массиве buffer). Что с ним делать? Организуем процедуру для вывода содержимого пакета на экран. Я особо не заморачивался по поводу этой процедуры, так что кому не
нравиться может организовать все самостоятельно. Главное знать, что где находиться!
Если ты все сделаешь, откомпилишь и запустишь, затем
пропингуешь самого себя, ты получишь столько пакетов сколько отправил! Почему, спросишь ты? Дело в том что «сырым» сокетам передаются не все ICMP пакеты, некоторые ядро обрабатывает самостоятельно, это небольшой недостаток нашей с тобой проги.
Зато если вместо IPPROTO_ICMP в сокете написать IPPROTO_RAW, тогда ты получишь доступ и к IGMP пакетам, а также ко всем пакетам в поле протокол которых стоит неизвестное ядру значение, попросту говоря все пакеты, которые ядро не знает как обрабатывать!
Ответы на тест VK Testers для получения бесплатных стикеров Кролик Олег
Для чего тестировщику менять ширину канала?
Что полезного можно найти в системных логах?
Что такое Smoke test?
Какового режима видеодаптера НЕ существует?
Что означает ADB в тестировании?
AdBlock
Apple Desktop Bus
Android Debug Bridge (правильный ответ)
Что подразумевает контроль качества (QC) в процессе разработки?
Что является одним из признаков некачественного ПО?
Как называется программа, позволяющая отправлять сетевые запросы из интерфейса командной строки?
requestMaker
curl (правильный ответ)
grep
Что является одной из основных функциональных особенностей языка Kotlin по сравнению с языком Java?
Функция, которая вызывает сама себя, называется
Что такое операционная оболочка?
От чего зависит отображение сайта в браузере?
Как расшифровывается UEFI?
Что такое операционная среда?
Какой из этих IP адресов является невалидным?
Какой из фреймворков для автоматизации тестирования является самым популярным?
Чем POST отличается от GET?
Чем тестирование отличается от отладки?
Какое минимальное количество тестовых конфигураций необходимо, если локалей две: ru и en, поддерживаемые браузеры Chrome и Safari, а поддерживаемые версии iOS 9 и 10?
Зачем тестировщику консоль в браузере?
Как называется список рекомендаций от Apple, в котором содержатся советы по созданию приложений?
Какой из протоколов не является защищенным?
Как можно посмотреть содержимое
icmp-пакетов?
Что полезного для тестирования хранится в системных логах?
В каких случаях тестирование является динамическим?
Что не используют для измерения объемов памяти?
Что из перечисленного является устойчивым названием одного из элементов пользовательского интерфейса?
Какой из этих тестов негативный?
Чем тестирование производительности отличается от нагрузочного тестирования?
Для чего нужно нагрузочное тестирование?
В чем отличие локализации от интернационализации?
Что такое регрессионное тестирование?
На чьей стороне исполняется JavaScript?
Правильный ответ — Клиента
Чем отличаются браузеры?
Правильный ответ — Движком
Что такое UX?
Правильный ответ — Опыт взаимодействия пользователя с приложением
Что из этого не является частью тестирования производительности?
Правильный ответ — Функциональное тестирование
Что подразумевается под чек-листами в тестировании? —
Правильный ответ — Инструмент для пошагового тестирования приложения
Для чего нужен DNS?
Правильный ответ — Для преобразования доменов в IP-адреса
Какой термин используется для обозначения короткого цикла тестов для подтверждения работоспособности основных функций приложения?
Правильный ответ — Smoke test
Как тестовое покрытие влияет на качество продукта?
Правильный ответ — Не прямо пропорционально
Чем альфа-тестирование отличается от бета-тестирования?
Правильный ответ — Кругом лиц
Что такое FTP?
Правильный ответ — Протокол для передачи данных по сети, основан на TCP
Зачем тестировщику VPN?
Правильный ответ — Для защищенности тестовой среды
Какой из этих элементов присутствует в трехуровневой архитектуре программного комплекса?
Правильный ответ — Сервер базы данных
Объясните фразу «Я знаю отличную шутку про UDP, но не факт, что она до вас дойдет».
Правильный ответ — UDP предоставляет ненадёжный сервис
Расшифруйте аббревиатуру QA
Правильный ответ — Quality Assurance
Правильный ответ — Безопасный
Что или кто называется Linux?
Правильный ответ — Ядро ОС
Зачем ВКонтакте API?
Правильный ответ — Для предоставления сервисов и данных разработчикам приложений
Что такое тест-кейс?
Правильный ответ — Инструмент тестировщика, предназначенный для документирования и проверки одного или более ожидаемых результатов
Что такое XSS?
Правильный сайт — Межсайтовый скриптинг
Расшифруйте аббревиатуру MVP
Правильный ответ — Model-View-Presenter
Поздравляем!
Пять правильных ответов у Вас в кармане, добро пожаловать в Программу бета-тестирования ВКонтакте.