К основному контенту

Рекомендации для пользователей про размещение объявлений о продаже автозапчастей

Утилита ss в Linux

Иногда бывает необходимо посмотреть какие сетевые подключения linux открыты, какие ip адреса используются или какие порты прослушиваются. Раньше для таких целей использовалась утилита netstat. Ее, без сомнения, знают все системные администраторы и специалисты по безопасности. Но она больше не поставляется по умолчанию в новых дистрибутивах.  Вместо нее используется новая утилита ss в linux.

Netstat сканирует директорию /proc для получения необходимой информации, но в новых версиях ядра была реализована специальная подсистема для мониторинга сети в Linux. Ее и использует ss, с помощью этой утилиты вы можете получить больше информации о сетевых подключениях и работает она гораздо быстрее.

Как вы уже поняли в этой статье мы рассмотрим мониторинг сетевых подключений в Linux с помощью утилиты из пакета iproute - ss linux. Начнем, как обычно, с синтаксиса и основных опций.

Содержание статьи: Общая информация Опции утилиты ss Примеры использования Мониторинг сетевых подключений Просмотр статистики статистики сетевых подключений Фильтрация по протоколу Фильтрация по состоянию соединения Фильтрация по адресу и номеру порта Выводы Общая информация

Как уже было сказано работает утилита ss в Linux на основе подсистемы ядра. Синтаксис очень простой - сама команда и ее опции:

$ ss опции [фильтр_состояния] [фильтр_адреса]

Для удобства вывод команды ss можно фильтровать с помощью grep:

$ ss опции | grep шаблон

Опции указывает различные параметры отображения и фильтрации информации. Фильтры по состоянию и адресу очень интересная вещь, они позволяют выполнять мониторинг сетевых подключений в Linux, только тех что нужно. Например, только открытых, закрытых или находящихся на этапе подключения. Подробнее мы рассмотрим это в конце статьи. Опции утилиты ss

Для сетевых подключений в Linux с помощью утилиты ss можно использовать такие опции: -V - Version показать версию утилиты -n - Numeric не определять имена служб -r - Resolve определять сетевые имена адресов с помощью dns -a - All отобразить все сокеты (открытые соединения) -l - Listening показать только прослушиваемые сокеты -o - Options показать информацию таймера -e - Extended выводить расширенную информацию о сокете -p - Processes, показать процессы, использующие сокет -i - Internal, посмотреть внутреннюю информацию TCP -s - Summary, статистика использования сокета -D - экспортировать текущее состояние TCP сокетов в файл -F - работать с информацией, взятой из файла

Кроме того, можно вывести сокеты только нужного протокола: -4, --ipv4 - только сокеты протокола IP версии 4 -6 --ipv6 - только сокеты протокола IP версии 6 -0, --packet - только PACKET сокеты -t, --tcp - TCP сокеты -u, --udp - UDP сокеты -d, --dhcp - DHCP сокеты -r, --raw - RAW сокеты -x, --unix - UNIX сокеты

Для фильтрации протоколов можно использовать не только эти опции, но и универсальную опцию -f, передав ей в параметре название протокола. Здесь собраны самые основные опции, если вам нужно больше информации - смотрите справку команды. Примеры использования

А теперь давайте рассмотрим примеры использования утилиты ss Linux. Возможно, из описания опций вы мало что поняли, но с примерами все встанет на свои места.

Мониторинг сетевых подключений

Сначала смотрим все сетевые подключения:

sudo ss 

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 5114 * 0 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 5125 * 0 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 5226 * 0 u_str ESTAB 0 0 * 5309 * 0 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 5310 * 0

Посмотрим только TCP соединения:

sudo ss -t

Или:

sudo ss -f tcp

State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:35006 64.233.165.189:https ESTAB 0 0 192.168.1.2:42537 87.240.144.247:http ESTAB 0 0 192.168.1.2:50290 185.32.251.2:https ESTAB 0 0 192.168.1.2:50873 173.194.222.188:https ESTAB 0 0 127.0.0.1:42245 127.0.0.1:nut

Теперь только Unix:

sudo ss -x

Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 989 * 0 u_str ESTAB 0 0 * 990 * 0 u_str ESTAB 0 0 * 5109 * 0 u_str ESTAB 0 0 * 5110 * 0 u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 5114 * 0

Для отображения UDP сокетов используйте опцию u. По умолчанию будут показаны только подключенные соединения. Если хотите получить все, нужно использовать опцию a. Поскольку UDP, это протокол без постоянного соединения, то без опции -a мы ничего не увидим:

sudo ss -ua

UNCONN 0 0 192.168.1.2:48268 *: * UNCONN 0 0 192.168.1.2:56575 *: * UNCONN 0 0 *: 40309 *: * UNCONN 0 0 192.168.1.2:56879 *: * UNCONN 0 0 *: 49014 *: * UNCONN 0 0 192.168.1.2:53124 *: * UNCONN 0 0 127.0.1.1:domain *: *

По умолчанию утилита не пытается определять имена хостов через dns, но можно ее попросить делать это опцией -r:

sudo ss -tr

SYN-SENT 0 1 192.168.1.2:44338 host104.rax.ru:http ESTAB 0 0 192.168.1.2:39774 ord08s12-in-f31.1e100.net:https ESTAB 0 0 192.168.1.2:43104 le-in-f139.1e100.net:https ESTAB 368 0 192.168.1.2:44073 bud02s21-in-f174.1e100.net:https ESTAB 0 0 192.168.1.2:35003 lg-in-f189.1e100.net:https ESTAB 0 0 192.168.1.2:39131 157.55.235.161:40026

Обратная опция -n, не будет выполняться не только dns резолвинг, но и определение протоколов портов, зато мониторинг сети в Linux работать будет быстрее:

sudo ss -tn

ESTAB 0 0 192.168.1.2:54537 192.0.78.22:443 ESTAB 0 0 192.168.1.2:44623 158.69.120.146:443 ESTAB 0 0 192.168.1.2:35006 64.233.165.189:443 ESTAB 0 0 192.168.1.2:44625 158.69.120.146:443 ESTAB 368 0 192.168.1.2:44074 216.58.209.174:443 ESTAB 0 0 192.168.1.2:42537 87.240.144.247:80

Теперь просмотрим только прослушиваемые tcp сокеты.

LISTEN 0 0 *:ssh *:* LISTEN 0 0 :::microsoft-ds :::* LISTEN 0 0 :::netbios-ssn :::* LISTEN 0 0 :::ssh :::*

Здесь мы видим только имена служб, это не всегда удобно, указав опцию n, мы получим номера портов.

Так же само можно посмотреть прослушиваемые udp сокеты:

sudo ss -tun

UNCONN 0 0 192.168.1.2:ntp *:* UNCONN 0 0 25.81.248.51:ntp *:* UNCONN 0 0 127.0.0.1:ntp *:* UNCONN 0 0 *:ntp *:*

Также мы можем попытаться узнать название и PID процесса, использующего сокет:

sudo ss -ltp

LISTEN 0 0 127.0.0.1:9050 *:* users:(("tor",pid=2602,fd=7)) LISTEN 0 0 *:microsoft-ds *:* users:(("smbd",pid=2540,fd=29)) LISTEN 0 0 127.0.0.1:nut *:* users:(("upsd",pid=2657,fd=4)) LISTEN 0 0 *:netbios-ssn *:* users:(("smbd",pid=2540,fd=30))

Просмотр статистики статистики сетевых подключений

Для просмотра статистики по использованию сетевых подключений наберите:

sudo ss -s

Total: 854 (kernel 1010) TCP: 36 (estab 22, closed 3, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total IP IPv6 * 1010 - - RAW 2 1 1 UDP 28 21 7 TCP 33 30 3 INET 63 52 11 FRAG 0 0 0

С помощью опции -о можно посмотреть информацию о таймере и состоянии подключения.

sudo ss -to

tcp ESTAB 0 0 192.168.1.2:57862 46.29.160.21:http timer:(keepalive,33sec,0) tcp ESTAB 0 0 192.168.1.2:55539 74.125.205.94:https timer:(keepalive,43sec,0) tcp ESTAB 0 0 192.168.1.2:37930 95.213.4.196:https timer:(keepalive,830ms,0) tcp ESTAB 0 0 192.168.1.2:52991 157.56.192.174:https tcp ESTAB 0 0 192.168.1.2:39819 87.240.131.118:http timer:(keepalive,37sec,0) tcp ESTAB 0 0 192.168.1.2:45874 87.240.131.99:https timer:(keepalive,10sec,0)

Фильтрация по протоколу

Мы можем отображать только нужный нам протокол. Например только ipv4:

sudo ss -tl -f inet4

Или:

sudo ss -tl4

State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 0 127.0.0.1:9050 *:* LISTEN 0 0 *:microsoft-ds *:* LISTEN 0 0 127.0.0.1:nut *:* LISTEN 0 0 *:netbios-ssn *:* LISTEN 0 0 *:9518 *:* LISTEN 0 0 *:ssh *:*

Так же само можно отобразить только соединения ipv6:

sudo ss -tl6

State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 0 :::microsoft-ds :::* LISTEN 0 0 :::netbios-ssn :::* LISTEN 0 0 :::ssh :::*

Фильтрация по состоянию соединения

В синтаксисе команды мы описали два дополнительных параметра. Фильтрация состояния и фильтрация по адресу. Рассмотрим теперь как ими пользоваться. Сокет TCP может находиться в одном из нескольких состояний. Например, так утилита ss linux выведет только подключенные сокеты.

 ss -t4 state established

0 0 192.168.1.2:35006 64.233.165.189:https 0 0 192.168.1.2:58064 46.29.160.21:http 0 0 192.168.1.2:60961 64.233.164.138:https 0 0 192.168.1.2:55581 173.194.71.189:https 0 0 192.168.1.2:50873 173.194.222.188:https 0 0 127.0.0.1:42245 127.0.0.1:nut

Или сокеты в состоянии ожидания:

sudo ss -t4 state time-wait

0 0 192.168.1.2:42261 199.59.150.39:https 0 0 127.0.0.1:43541 127.0.0.1:2633

В параметр state можно передать одно из следующих значений: established syn-sent syn-recv fin-wait-1 fin-wait-2 time-wait closed close-wait last-ack closing all  - все состояния connected - все кроме прослушиваемых и закрытых synchronized - все кроме syn-sent bucket -  time-wait и syn-recv big - все кроме bucket

Не все состояния подключений можно увидеть просто выполнив команду. Например, syn-sent и syn-recv вряд ли получиться словить, потому что соединения находятся в этом состоянии очень короткое время. Для их отображения удобно использовать команду watch:

watch -n 1 "ss -t4 state syn-sent"

Recv-Q Send-Q Local Address:Port Peer Address:Port 0 1 192.168.1.3:46088 88.212.202.4:http 0 1 192.168.1.3:46087 88.212.202.4:http

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

Фильтрация по адресу и номеру порта

Кроме фильтрации по состоянию, tcp сокеты можно фильтровать по адресам или портам соединений.

Например, отберем все сетевые подключения linux с портом источником или приемником ssh, то есть все входящие и исходящие соединения ssh:

ss -at '( dport = :ssh or sport = :ssh )'

State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:ssh *:* LISTEN 0 128 :::ssh :::*

Или сокеты с портом назначения 80 или 443:

ss -nt '( dst :443 or dst :80 )'

State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:58844 199.59.148.82:443 ESTAB 0 0 192.168.1.2:55320 165.193.246.23:443 ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80 ESTAB 0 0 192.168.1.2:54889 192.241.177.148:443 ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80 ESTAB 0 0 192.168.1.2:33440 38.127.167.38:443

Такой синтаксис тоже будет работать:

ss -nt dst :443 or dst :80

Еще несколько примеров фильтрации:

Фильтрация по адресу:

ss -nt dst 74.125.236.178

Фильтрация по адресу и подсети:

ss -nt dst 74.125.236.178/16

И по адресу и порту:

ss -nt dst 74.125.236.178:80

Если вы хотите фильтровать сетевые соединения по порту, перед портом ставьте двоеточие:

ss -nt dport = :80

State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.1.2:56198 108.160.162.37:80 ESTAB 0 0 192.168.1.2:39893 173.255.230.5:80 ESTAB 0 0 192.168.1.2:55043 74.125.236.178:80

Можно использовать такие операторы сравнения: = или ge - больше или ровно порту == или eq - точное соответствие != или ne - не равно < или gt - меньше > или lt - больше Выводы

Вот и все. Основную информацию о том, как выполнять мониторинг сети в Linux с помощью утилиты ss рассмотрели. Если вам нужно больше информации и примеров смотрите документацию по утилитам набора iproute.

Комментарии


Дистанционная компьтерная помощь, удаленная компьютерная помощь онлайн.

Популярные сообщения из этого блога

Лучшие плагины для OBS Studio

Open Broadcast Software или OBS - это свободное программное обеспечение с открытым исходным кодом для стриминга аудио и видео данных в сеть интернет. Программа полностью кроссплатформенная и может работать в Windows, Linux или MacOS. Это отличная альтернатива для таких программ, как Wirecast и XSplit. OBS использует для вещания стандартный протокол обмена сообщениями в реальном времени, а поэтому может транслировать данные в любой сервис, поддерживающий это, например, Yotube. Несмотря на широкие возможности OBS, программа поддерживает еще и множество плагинов. В этой статье мы рассмотрим лучшие плагины для OBS Studio, которые вы можете использовать. Содержание статьи: Лучшие плагины OBS Studio 1. Browser Source Plugin 2. Video Source Plugin 3. Simple Scene Switcher 4. DirectShow Audio Source 5. CLR Browser Source 6. OBS Remote 7. AMD Advanced Media Framework Encoder 8. Text Source Plugin Выводы Лучшие плагины OBS Studio Чтобы найти плагины OBS Studio для Video пользо

Лучшие аналоги Paint для Linux

Когда я работал в Windows, я часто использовал стандартную программу редактора изображений Windows - Paint. Не всегда нужен очень и многофункциональный инструмент вроде Photoshop или Gimp. Иногда, чтобы подправить ту или иную картинку, дорисовать на ней несколько фигур или вставить текст достаточно простого, легкого в освоении графического редактора вроде Paint. В Linux таких программ довольно много. В этой инструкции мы рассмотрим лучшие аналоги Paint для Linux. В этот список не будут включены такие программы, как Gimp и Krita, ведь это полнофункциональные графические редакторы, векторные редакторы, такие как Inkscape мы тоже рассматривать не будем. А теперь перейдем к списку. Содержание статьи: KolourPaint MyPaint Gnome Paint XPaint Pinta mtPaint GPaint Rassam-paint Выводы KolourPaint На первом месте в списке аналогов Piant для Linux будет KoloutPaint. Это стандартный графический редактор для окружения рабочего стола KDE. Он поддерживает множество форматов изображе

Подключение OneDrive в Linux

OneDrive (Ранее известный как SkyDrive) это популярное облачное хранилище файлов от Майкрософт. Сейчас OneDrive бесплатно предоставляет 7 гигабайт пространства новым пользователям. Как вы знаете OneDrive хорошо интегрирован с другими продуктами компании  Microsoft. В OneDrive Также есть официальный клиент который автоматически загружает ваши видео и фотографии с камеры в облако. Но к сожалению этот клиент недоступен для операционных систем семейства Linux. Но не все так плохо. Сообщество открытого программного обеспечения уже нашло решение. Это opedrive-d от Boilermaker. Запустившись как демон программа автоматически синхронизирует локальную папку с облаком OneDrive. Содержание статьи: Установка Onedrive-d в Linux Настройка Синхронизация локальной папки с OneDrive Установка Onedrive-d в Linux Несмотря на то что onedrive-d разрабатывается для Ubuntu/Debian, CentOs/Fedora/RHEL поддерживается тоже хорошо. Для установки достаточно набрать несколько команд: $ git clone h