Команда tcpdump в linux

sed: синтаксический анализ и преобразование текста

sed — это специальный потоковый редактор, который ищет шаблон в тексте и применяет к нему необходимые изменения.

Данный редактор может быть в том числе пакетным или неинтерактивным редактором. Его функции заключаются в том, что он считывает из файла или из (при наличии каналов) по одной строке за раз. При этом исходный входной файл остается неизменным (так как sed также является фильтром), после чего результаты преобразуются в стандартные выходные данные.

Анатомия типичной sed-команды Linux-терминала

Опции sed:

  • адрес — может быть номером строки, диапазоном или совпадением. Может быть оставлен по умолчанию, либо являться файлом целиком;
  • команда — :substitute (замена), :print (печать), :delete (удалить), :append (добавить), :insert (вставить), :quit (завершить);
  • regex — регулярные выражения;
  • знак-разграничитель — в данном случае необязательно использовать «», можно также применять  «» или «» или любой другой символ;
  • модификатор — его роль может выполнять число , которое применяет команду к N-му вхождению, применяет ко всей строке в целом;
  • общие признаки состояния sed — (без печати), (несколько операций), (чтение sed из файла), (на месте редактирования).

Полезные примеры sed:

  • — печать строк с 5 по 9;
  • — влияет на 1-е вхождение в стр. 20–30;
  • — печать последней строки;
  • — удалить первые 3 строки;
  • — удалить все пустые строки;
  • — заменить всё, кроме  York;
  • .

В следующей части разберём основные инструменты терминала Linux.

Ксения Широкова

Перевод материала «Linux Terminal Tools»

Отслеживание активных процессов

Существует несколько различных инструментов для просмотра/перечисления запущенных в системе процессов. Двумя традиционными и хорошо известными из них являются команды ps и top:

Команда ps

Отображает информацию об активных процессах в системе, как показано на следующем скриншоте:

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

Столбцы, присутствующие в выводе команды , имеют следующие значения:

   UID — идентификатор пользователя, которому принадлежит процесс (тот, от чьего имени происходит выполнение).

   PID — идентификатор процесса.

   PPID — идентификатор родительского процесса.

   C — загрузка CPU процессом.

   STIME — время начала выполнения процесса.

   TTY — тип терминала, связанного с процессом.

   TIME — количество процессорного времени, потраченного на выполнение процесса.

   CMD — команда, запустившая этот процесс.

Также можно отобразить информацию по конкретному процессу, используя команду , например:

Есть и другие опции, которые можно использовать вместе с командой :

    — показывает информацию о процессах по всем пользователям;

    — показывает информацию о процессах без терминалов;

    — показывает дополнительную информацию о процессе по заданному UID или имени пользователя;

    — отображение расширенной информации.

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

Обратите внимание на выделенный заголовок. Команда поддерживает функцию сортировки процессов по соответствующим столбцам

Например, чтобы отсортировать список процессов по потреблению ресурсов процессора (в порядке возрастания), введите команду:

Результат:

Если вы ходите выполнить сортировку по потреблению памяти (в порядке убывания), то добавьте к имени интересующего столбца знак минуса:

Результат:

Еще один очень популярный пример использования команды — это объединение её и для поиска заданного процесса по его имени:

Результат:

Команда top

Команда top отображает информацию о запущенных процессах в режиме реального времени:

Рассмотрим детально:

   PID — идентификатор процесса.

   USER — пользователь, которому принадлежит процесс.

   PR — приоритет процесса на уровне ядра.

   NI — приоритет выполнения процесса от до .

   VIRT — общий объем (в килобайтах) виртуальной памяти (физическая память самого процесса; загруженные с диска файлы библиотек; память, совместно используемая с другими процессами и т.п.), используемой задачей в данный момент.

   RES — текущий объем (в килобайтах) физической памяти процесса.

   SHR — объем совместно используемой с другими процессами памяти.

   S (сокр. от «STATUS») — состояние процесса:

   S (сокр. от «Sleeping») — прерываемое ожидание. Процесс ждет наступления события.

   I (сокр. от «Idle») — процесс бездействует.

   R (сокр. от «Running») — процесс выполняется (или поставлен в очередь на выполнение).

   Z (сокр. от «Zombie») — зомби-процесс.

   %CPU — процент используемых ресурсов процессора.

   %MEM — процент используемой памяти.

   TIME+ — количество процессорного времени, потраченного на выполнение процесса.

   COMMAND — имя процесса (команды).

Также в сочетании с основными символами состояния процесса (S от «STATUS») вы можете встретить и дополнительные:

    — процесс с высоким приоритетом;

    — процесс с низким приоритетом;

    — многопоточный процесс;

    — фоновый процесс;

    — лидер сессии.

Примечание: Все процессы объединены в сессии. Процессы, принадлежащие к одной сессии, определяются общим идентификатором сессии — идентификатором процесса, который создал эту сессию. Лидер сессии — это процесс, идентификатор сессии которого совпадает с его идентификаторами процесса и группы процессов.

Команда glances

Команда glances — это относительно новый инструмент мониторинга системы с расширенными функциями:

Примечание: Если в вашей системе отсутствует данная утилита, то установить её можно с помощью следующих команд:

RHEL/CentOS/Fedora

Debian/Ubuntu/Linux Mint

Команды Linux, связанные с процессом

Эти команды используются для обработки процессов Linux

55. ps

Команда Linux ps — это встроенный инструмент для отслеживания текущих процессов в системе. Он будет фиксировать состояние системы за один раз.

56. pmap

Команда pmap отображает карту использования памяти процесса или нескольких процессов. Pmap сообщает информацию об адресном пространстве или карте использования памяти процесса.

57. top

Команда top в Linux отображает запущенные процессы в системе. Эта команда широко используется для мониторинга нагрузки на сервер.

58. kill

Команда kill используется в Linux и других Unix-подобных операционных системах для завершения процессов без необходимости выхода из системы или перезагрузки компьютера.

59. killall

Команда killall может использоваться для отправки сигнала определенному процессу, используя его имя. Это означает, что если у вас запущено пять версий одной и той же программы, команда killall уничтожит все пять.

60. pkill

Аналогично команде killall, pkill посылает сигнал для завершения процесса с его именем. Начиная с Centos 7 рекомендуется использовать pkill.

61. fg и bg

Мы можем запускать задания в фоновом режиме без какого-либо вмешательства пользователя. Процессы, которые были остановлены каким-либо сигналом прерывания, могут быть продолжены в фоновом режиме с помощью команды bg. Команда fg похожа на команду bg, за исключением того, что вместо отправки команды в фоновом режиме она запускает их на переднем плане, занимает текущий терминал и ожидает завершения процесса.

Средняя нагрузка

Секция средней нагрузки представляет собой среднюю «нагрузку» за одну, пять и пятнадцать минут. «Нагрузка» — это мера вычислительной работы, которую выполняет система. В Linux загрузка — это количество процессов в состояниях R и D в любой момент времени. Значение «средняя загрузка» дает вам относительную меру того, как долго вы должны ждать, чтобы что-то было сделано.

Давайте рассмотрим несколько примеров, чтобы понять эту концепцию. В одноядерной системе средняя нагрузка 0,4 означает, что система выполняет только 40% работы, которую она может выполнить. Среднее значение нагрузки, равное 1, означает, что система точно загружена — система будет перегружена, если добавить еще немного дополнительной работы. Система со средней нагрузкой 2,12 означает, что она перегружена на 112% больше работы, чем может выдержать.

В многоядерной системе сначала нужно разделить среднюю нагрузку на количество ядер ЦП, чтобы получить аналогичный показатель.

Кроме того, «средняя нагрузка» на самом деле не является типичной «средней», которую большинство из нас знает. Это « экспоненциальное скользящее среднее », что означает, что небольшая часть предыдущих средних нагрузок учитывается в текущем значении.

Управление историей

В виде Джордж Сантаяна классно сказал, «Те, кто не может вспомнить прошлое, обречены его повторять». К сожалению, в Linux, если вы не можете вспомнить прошлое, вы не можете повторить его, даже если захотите.

Вот тогда и пригодится команда Linux history. Это позволяет вам просмотреть и повторить ваши предыдущие команды. Это не только для поощрения лени или экономии времени — здесь также играет роль фактор эффективности (и точности). Чем длиннее и сложнее команда, тем сложнее ее запомнить и ввести без ошибок. Есть два типа ошибок: один, который мешает команде работать, и второй, который позволяет команде работать, но заставляет ее делать что-то неожиданное.

Команда history устраняет эти проблемы. Как и большинство команд Linux, . Однако, если вы научитесь использовать команду history, вы сможете улучшить использование командной строки Linux каждый день. Это хорошее вложение вашего времени. Есть гораздо лучшие способы использовать команду history, чем просто многократно нажимать стрелку вверх.

Установка и начало использования

Установить эту утилиту в debian или ubuntu можно так:

$ sudo apt install tcpdump

Использовать данное приложение может только администратор. Поэтому для работы используем sudo или работаем под пользователем root.

Первым делом можем посмотреть список доступных интерфейсов используя опцию -D:

$ sudo tcpdump -D
1.ens18 
2.any (Pseudo-device that captures on all interfaces) 
3.lo 
4.docker0 
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.usbmon1 (USB bus number 1)

Рассмотрим эти интерфейсы:

  • ens18 – обычный сетевой интерфейс;
  • lo – локальный сетевой интерфейс;
  • any – псевдоинтерфейс обозначающий все интерфейсы;
  • docker0 – у меня установлен в системе docker и этот интерфейс относится к нему;
  • nflog, nfqueue, usbmon1 – не относятся к сети, и в этой статье рассматриваться не будут.

What is tcpdump?

The tool was developed in the late 1980s and has been a network troubleshooting staple since that time. It is distributed under a BSD license and is free to download and use. It works on most *nix operating systems and has a ported version for Windows. At the most basic level, is a packet capture tool used to troubleshoot network connectivity issues. It is probably most closely compared to Wireshark. However, it is far lighter and is command-line only (no GUI available to my knowledge).

Installation

Before we begin poking around with the command, let’s take a look at installing it. It usually ships with most modern Linux OSs so you probably already have it. You can verify this by running . If it isn’t installed, don’t worry—installation is simple. Run the following command:

Системные команды Linux

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

1. uname

Команда Uname используется в Linux для поиска информации об операционных системах. В Uname существует много опций, которые могут указывать имя ядра, версию ядра, тип процессора и имя хоста.

Следующая команда uname с опцией  отображает всю информацию об операционной системе.

2. uptime

Информация о том, как долго работает система Linux, отображается с помощью команды uptime. Информация о времени безотказной работы системы собирается из файла ‘/proc/uptime‘. Эта команда также отобразит среднюю нагрузку на систему.

Из следующей команды мы можем понять, что система работает в течение последних 36 минут.

Полное руководство команды Uptime

3. hostname

Вы можете отобразить имя хоста вашей машины, введя  в своем терминале. С помощью опции  вы можете просмотреть ip-адрес компьютера. А с помощью параметра  вы можете просмотреть доменное имя.

4. last

Команда last в Linux используется для определения того, кто последним вошел в систему на вашем сервере. Эта команда отображает список всех пользователей, вошедших (и вышедших) из «/var/log/wtmp » с момента создания файла.

Вам просто нужно ввести «last» в своем терминале.

5. date

В Linux команда date используется для проверки текущей даты и времени системы. Эта команда позволяет задать пользовательские форматы для дат.

Рекомендуем статью Команда Date (Дата) в Linux с примерами использования

Например, используя «date +%D«, вы можете просмотреть дату в формате «ММ/ДД/ГГ«.

6. cal

По умолчанию команда cal отображает календарь текущего месяца. С помощью опции  вы можете просмотреть календарь на весь год.

9. reboot

Команда reboot используется для перезагрузки системы Linux. Вы должны запустить эту команду из терминала с правами суперпользователя sudo.

10. shutdown

Команда shutdown используется для выключения или перезагрузки системы Linux. Эта команда позволяет планировать завершение работы и уведомлять пользователей сообщениями о выключении и перезагрузке.

По умолчанию компьютер (сервер) выключится через 1 минуту. Вы можете отменить расписание, выполнив команду:

Немедленное отключение тоже возможно, для этого используется опция «now»

How To Install tcpdump on Linux

While most of the time you will find tcpdump preinstalled on your system, some Linux distributions do not ship with the package. Therefore, you may have to manually install the utility on your system.

You can check if tcpdump is installed on your system by using the which command.

If the output displays a directory path (/usr/bin/tcpdump), then your system has the package installed. However if not, you can do it easily using the default package manager on your system.

To install tcpdump on Debian-based distributions such as Ubuntu:

Installing tcpdump on CentOS is easy as well.

On Arch-based distributions:

To install on Fedora:

Note that the tcpdump package requires libcap as a dependency, so make sure you install it on your system as well.

Чтение и запись снимков в файл

Еще одна полезная функция — записывать пакеты в файл. Это удобно, когда вы захватываете большое количество пакетов или захватываете пакеты для последующего анализа.

Чтобы начать запись в файл, используйте параметр за которым следует выходной файл захвата:

Эта команда выше сохранит захват в файл с именем . Вы можете назвать файл по , но обычно используется расширение (захват пакетов).

Когда используется опция , вывод не отображается на экране. записывает необработанные пакеты и создает двоичный файл, который невозможно прочитать обычным текстовым редактором.

Чтобы проверить содержимое файла, вызовите с параметром :

Если вы хотите запустить в фоновом режиме , добавьте символ амперсанда ( ) в конце команды.

Файл захвата также можно проверить с помощью других инструментов анализатора пакетов, таких как Wireshark.

При захвате пакетов в течение длительного периода времени вы можете включить ротацию файлов. позволяет создавать новые файлы и вращать файл дампа через указанный интервал времени или фиксированного размера. Следующая команда создаст до десяти файлов размером 200 именами , и т. Д. Перед перезаписью старых файлов.

После создания десяти файлов старые файлы будут перезаписаны.

Обратите внимание, что запускать только во время устранения неполадок. Если вы хотите запустить в определенное время, вы можете использовать cronjob

не имеет возможности выйти через заданное время. Вы можете использовать команду чтобы остановить через некоторое время. Например, чтобы выйти через 5 минут, вы должны использовать:

Если вы хотите запустить в определенное время, вы можете использовать cronjob . не имеет возможности выйти через заданное время. Вы можете использовать команду чтобы остановить через некоторое время. Например, чтобы выйти через 5 минут, вы должны использовать:

Команда истории

В простейшей форме вы можете использовать команду history, просто набрав ее имя:

history

Список ранее использованных команд записывается в окно терминала.

Команды пронумерованы, а самые последние использованные (с наибольшими номерами) находятся в конце списка.

Чтобы увидеть определенное количество команд, вы можете передать номер в историю в командной строке. Например, чтобы увидеть последние 10 команд, которые вы использовали, введите следующее:

history 10

Вы можете добиться того же результата, если пропустите историю через хвостовая команда. Для этого введите следующее:

history | tail -n 10

Формат вывода Tcpdump

Выход ТСРйитр зависит от протокола. Ниже приводится краткое описание и примеры большинства форматов.

Заголовки уровня канала, Если задана опция -e, загорается заголовок уровня ссылки. В сетях Ethernet печатаются исходные и целевые адреса, протокол и длина пакета.

В сетях FDDI опция «-e» вызывает ТСРйитр для печати поля «frame control», исходного и целевого адресов и длины пакета. (Поле управления кадрами управляет интерпретацией остальной части пакета. Обычными пакетами (такими как те, которые содержат IP-дейтаграммы) являются «асинхронные» пакеты с приоритетом от 0 до 7: например, `async4». Предполагается, что такие пакеты содержат пакет управления логической связью 802.2 (LLC); заголовок LLC печатается, если он не дейтаграмму ISO или так называемый пакет SNAP.

В сетях Token Ring опция ‘-e’ вызывает ТСРйитр для печати полей «контроля доступа» и «управления кадрами», адресов источника и получателя и длины пакета. Как и в сетях FDDI, предполагается, что пакеты содержат пакет LLC. Независимо от того, указан ли параметр «-e» или нет, информация о маршрутизации источника печатается для пакетов с маршрутизацией с источником.

(N.B .: Следующее описание предполагает знакомство с алгоритмом сжатия SLIP, описанным в RFC-1144.)

На SLIP-каналах распечатывается индикатор направления («I» для входящего, «O» для исходящего), тип пакета и информация о сжатии. Сначала печатается тип пакета. Эти три типа IP , utcp , а также CTCP , Никакая дополнительная информация о ссылках не будет напечатана для IP пакеты. Для TCP-пакетов идентификатор соединения печатается по типу. Если пакет сжимается, его кодированный заголовок печатается. Специальные случаи распечатываются как* S + N а также* SA + N , где N это количество, на которое изменился порядковый номер (или порядковый номер и ack). Если это не особый случай, печатаются ноль или более изменений. Изменение обозначается U (срочный указатель), W (окно), A (ack), S (порядковый номер) и I (идентификатор пакета), затем дельта (+ n или -n) или новое значение (= п). Наконец, печатается количество данных в пакетной и сжатой длине заголовка.

Например, следующая строка показывает исходящий сжатый TCP-пакет с неявным идентификатором соединения; ack изменился на 6, порядковый номер — на 49, а идентификатор пакета — на 6; есть 3 байта данных и 6 байтов сжатого заголовка:

O ctcp * A + 6 S + 49 I + 6 3 (6)

Пакеты Arp / rarp, Выход Arp / rarp показывает тип запроса и его аргументы. Этот формат не требует пояснений. Вот краткий образец, взятый с начала «rlogin» от хоста rtsg принимать гостей CSAM :

arp who-csam tell rtsgarp ответ csam is-at CSAM

В первой строке говорится, что rtsg отправил пакет arp с запросом Ethernet-адреса интернет-хоста csam. Csam отвечает своим Ethernet-адресом (в этом примере адреса Ethernet указаны в шапках и интернет-адресах в нижнем регистре).

Это выглядело бы менее излишним, если бы мы это сделали tcpdump -n :

arp who-has 128.3.254.6 tell 128.3.254.68arp ответ 128.3.254.6 is-at 02: 07: 01: 00: 01: c4

Если бы мы это сделали tcpdump -e , тот факт, что первый пакет передается, а второй — точка-точка, будет видимым:

RTSG Broadcast 0806 64: arp who-csam tell rtsgCSAM RTSG 0806 64: arp ответ csam is-at CSAM

Для первого пакета это говорит, что адресом источника Ethernet является RTSG, конечным пунктом является широковещательный адрес Ethernet, поле типа содержит шестнадцатеричный 0806 (тип ETHER_ARP), а общая длина — 64 байта.

TCP-пакеты (N.B.: Следующее описание предполагает знакомство с протоколом TCP, описанным

Понимание вывода tcpdump

выводит информацию для каждого захваченного пакета в новой строке. Каждая строка включает метку времени и информацию об этом пакете в зависимости от протокола.

Типичный формат строки протокола TCP выглядит следующим образом:

Пойдем по полю и объясним следующую строку:

  • — метка захваченного пакета по местному времени и использует следующий формат: , где — доли секунды с полуночи.

  • — пакетный протокол. В данном случае IP означает Интернет-протокол версии 4 (IPv4).

  • — IP-адрес и порт источника, разделенные точкой ( ).

  • — IP-адрес и порт назначения, разделенные точкой ( ).

  • — поле TCP Flags. В этом примере означает пакет подтверждения push, который используется для подтверждения предыдущего пакета и отправки данных. Другие типичные значения поля флага следующие:

    • — ACK (подтверждение)
    • — SYN (Начать соединение)
    • — PSH (Push-данные)
    • — FIN (Завершить соединение)
    • — RST (сбросить соединение)
    • — SYN-ACK (пакет SynAcK)
  • — Порядковый номер находится в . Он показывает количество данных, содержащихся в пакете. За исключением первого пакета в потоке данных, где эти числа являются абсолютными, все последующие пакеты используются как относительные позиции байтов. В этом примере номер , что означает, что этот пакет содержит байты от 201747193 до 201747301 потока данных. Используйте параметр для вывода абсолютных порядковых номеров.

  • Номер подтверждения — это порядковый номер следующих данных, ожидаемых на другом конце этого соединения.

  • — Номер окна — это количество доступных байтов в приемном буфере.

  • — длина данных полезной нагрузки

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
IP-файл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: