Как проверить, открыт ли определенный сетевой сокет в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, открыт ли определенный сетевой сокет в Linux. Понимание того, как определять и проверять активные сетевые сокеты, является фундаментальным навыком для устранения неполадок и мониторинга сети.

С помощью практических упражнений вы будете использовать мощные инструменты командной строки, такие как ss и netstat, чтобы перечислить и отфильтровать сетевые соединения. Вы также изучите файловую систему /proc/net, чтобы получить более глубокое понимание деталей сокетов, что обеспечит комплексный подход к проверке статуса сетевых сокетов в вашей системе.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/cat -.-> lab-558761{{"Как проверить, открыт ли определенный сетевой сокет в Linux"}} linux/netstat -.-> lab-558761{{"Как проверить, открыт ли определенный сетевой сокет в Linux"}} end

Проверка сокетов с помощью команды ss -tuln

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

Команда ss представляет собой мощный инструмент для исследования сокетов. Мы будем использовать ее с следующими параметрами:

  • -t: Отображать TCP - сокеты.
  • -u: Отображать UDP - сокеты.
  • -l: Отображать слушающие сокеты (сокеты, ожидающие соединений).
  • -n: Не разрешать имена служб (отображать номера портов вместо имен).

Если терминал еще не открыт, откройте его. Вы можете найти значок Xfce Terminal слева на рабочем столе.

Теперь введите следующую команду и нажмите Enter:

ss -tuln

Вы увидите вывод, похожий на следующий:

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:631                    0.0.0.0:*
tcp   LISTEN     0      128    0.0.0.0:5900                     0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:25                     0.0.0.0:*
tcp   LISTEN     0      128    [::]:22                          [::]:*
tcp   LISTEN     0      128    [::1]:631                        [::]:*
tcp   LISTEN     0      128    [::]:5900                        [::]:*
tcp   LISTEN     0      128    [::1]:25                         [::]:*
udp   UNCONN     0      0      127.0.0.1:323                    0.0.0.0:*
udp   UNCONN     0      0      0.0.0.0:631                      0.0.0.0:*
udp   UNCONN     0      0      [::1]:323                        [::]:*
udp   UNCONN     0      0      [::]:631                         [::]:*

Разберем вывод:

  • Netid: Тип сокета (например, tcp, udp).
  • State: Состояние сокета (например, LISTEN означает, что он ожидает соединения).
  • Recv-Q: Количество полученных байтов в очереди.
  • Send-Q: Количество отправленных байтов в очереди.
  • Local Address:Port: Локальный IP - адрес и номер порта, к которым привязан сокет. 0.0.0.0 и [::] указывают, что сокет слушает на всех доступных сетевых интерфейсах (соответственно IPv4 и IPv6).
  • Peer Address:Port: Удаленный IP - адрес и номер порта, к которому подключен сокет. * означает, что сокет слушает соединения от любого удаленного адреса.

Этот вывод показывает, какие службы запущены и ожидают соединений в вашей системе. Например, можно увидеть, что SSH (порт 22), CUPS (порт 631), VNC (порт 5900) и почтовый сервер (порт 25) ожидают соединений.

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

Нажмите Продолжить, чтобы перейти к следующему шагу.

Проверка сокетов с помощью команды netstat -tuln

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

Мы будем использовать netstat с теми же параметрами, что и ss, чтобы увидеть слушающие TCP - и UDP - сокеты без разрешения имен служб:

  • -t: Отображать TCP - сокеты.
  • -u: Отображать UDP - сокеты.
  • -l: Отображать слушающие сокеты.
  • -n: Не разрешать имена служб.

Введите следующую команду в терминале и нажмите Enter:

netstat -tuln

Вы увидите вывод, похожий на следующий:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::631                  :::*

Обратите внимание, что вывод команды netstat -tuln очень похож на вывод команды ss -tuln. Обе команды предоставляют информацию о протоколе (Proto), локальном адресе и порте (Local Address), внешнем адресе и порте (Foreign Address) и состоянии соединения (State).

В то время как ss обычно считается быстрее и информативнее в сложных сценариях, netstat по-прежнему представляет собой ценный инструмент в вашем арсенале команд Linux. Хорошей практикой является знакомство с обеими командами.

Теперь вы успешно использовали как ss, так и netstat для просмотра слушающих сокетов. Это фундаментальный навык для понимания сетевой активности в вашей системе.

Нажмите Продолжить, чтобы перейти к следующему шагу.

Проверка деталей сокетов в каталоге /proc/net

На этом этапе вы будете изучать каталог /proc/net, который предоставляет подробную информацию о сетевом стеке и сетевых протоколах в ядре Linux. Именно отсюда команды типа ss и netstat получают свои данные.

Файловая система /proc представляет собой виртуальную файловую систему, которая предоставляет информацию о процессах и другой системной информации. Это мощный способ проверить внутреннее состояние ядра.

Внутри /proc/net вы найдете файлы, содержащие необработанные данные о сетевых соединениях. Например, файлы tcp, udp, tcp6 и udp6 содержат информацию о активных TCP - и UDP - сокетах (соответственно для IPv4 и IPv6).

Давайте посмотрим на содержимое файла tcp. Введите следующую команду в терминале и нажмите Enter:

cat /proc/net/tcp

Вы увидите вывод, похожий на следующий:

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
   0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12345 1 0000000000000000 0
   1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 67890 1 0000000000000000 0
   ... (more lines)

Этот вывод менее удобочитаем, чем вывод ss или netstat, так как это необработанные данные ядра. Каждая строка представляет TCP - сокет и содержит различные поля, в том числе:

  • sl: Индекс в списке сокетов.
  • local_address: Локальный IP - адрес и порт в шестнадцатеричном формате. 0100007F - это шестнадцатеричное представление 127.0.0.1 (адрес петли обратной связи), а 0019 - шестнадцатеричное представление порта 25.
  • rem_address: Удаленный IP - адрес и порт в шестнадцатеричном формате.
  • st: Состояние сокета (например, 0A представляет состояние LISTEN).
  • tx_queue: Размер очереди передачи.
  • rx_queue: Размер очереди приема.
  • uid: Идентификатор пользователя, владеющего сокетом.
  • inode: Номер inode сокета.

Вы также можете просмотреть UDP - сокеты, посмотрев содержимое файла /proc/net/udp:

cat /proc/net/udp

Для IPv6 - сокетов вы можете проверить файлы /proc/net/tcp6 и /proc/net/udp6.

Хотя обычно вы не будете напрямую разбирать эти файлы в повседневной работе, понимание того, откуда берутся сетевые данные, дает более глубокое представление о том, как Linux управляет сетевыми соединениями. Команды типа ss и netstat по сути считывают и форматируют данные из этих файлов для более легкого понимания.

Теперь вы изучили необработанную информацию о сокетах, доступную в файловой системе /proc/net.

Нажмите Продолжить, чтобы завершить лабораторную работу.

Резюме

В рамках данной лабораторной работы вы научились проверять, открыт ли определенный сетевой сокет в системе Linux с использованием различных инструментов командной строки. Сначала вы использовали команду ss с параметрами -tuln для отображения слушающих TCP - и UDP - сокетов, а также поняли, что означают столбцы вывода, такие как Netid, State, Local Address:Port и Peer Address:Port.

После использования команды ss вы обычно проверяли информацию о сокетах с помощью команды netstat, которая предоставляет аналогичную сетевую статистику. Наконец, вы изучили, как проверить подробную информацию о сокетах непосредственно из файловой системы /proc/net, которая дает более низкоуровневый взгляд на сетевой стек. Эти шаги представляют собой комплексный подход к идентификации и изучению открытых сетевых сокетов в системе Linux.